명령의 실시간 값 변경을 표시하는 Bash 스크립트

명령의 실시간 값 변경을 표시하는 Bash 스크립트

Linux 시스템에는 다양한 센서 상태에 대한 값을 제공하는 일련의 명령이 있습니다.

이러한 명령의 호출은 다음과 유사합니다.

$ command1
5647
$ command2
76
$ command3
8754

값은 실시간으로 변경되며 값 중 하나의 상태를 확인하고 싶을 때마다 명령을 다시 시작해야 합니다... 하드웨어를 작동하려면 양손이 필요하기 때문에 아무 소용이 없습니다. .

내 목표는 다음과 같이 이러한 명령을 호출하고 값을 업데이트된 상태로 유지하는(실시간으로 비동기식으로 또는 x초마다 값을 새로 고치는) 간단한 Bash 스크립트를 만드는 것입니다.

$ ./myScript.sh
command1: x
command2: y
command3: z
command4: v

그 중 x, y, zv값이 변경됩니다.

Bash에서 이것이 간단하고 효율적으로 달성될 수 있습니까? 아니면 Python과 같은 다른 언어를 사용해야 합니까?

추가 정보로 업데이트되었습니다.

내 현재 스크립트는 다음과 같습니다

#!/bin/bash
echo "Célula calibrada: " $(npe ?AI1)
echo "Anemómetro: " $(npe ?AI2)
echo "Célula temperatura: " $(npe ?AI3)
echo "Célula temperatura: " $(npe ?AI4)

npe숫자 값을 반환하는 예제 명령입니다. 나는 다음과 같은 결과를 기대합니다.

여기에 이미지 설명을 입력하세요.

초 단위의 새로 고침 값이 있는 watch -n x ./myScript.sh명령 을 통해 이 출력을 얻고 있습니다 . x스크립트를 다음과 같이 편집하면:

#!/bin/bash
while sleep 1; do
   clear; # added to keep the information in the same line 
   echo "Célula calibrada: " $(npe ?AI1);
   echo "Anemómetro: " $(npe ?AI2);
   echo "Célula temperatura: " $(npe ?AI3);
   echo "Célula temperatura: " $(npe ?AI4);
done

내 출력에는 성가신 깜박임이 동반됩니다.

여기에 이미지 설명을 입력하세요.

답변1

tput cup 0 0을 사용하여 커서를 화면 왼쪽 상단으로 이동할 수 있습니다 . clear한 번.

#!/bin/bash
clear
while sleep 1; do
    tput cup 0 0
    printf "%21s %6d    \n" \
      "Célula calibrada: "   $(npe ?AI1) \
      "Anemómetro: "         $(npe ?AI2) \
      "Célula temperatura: " $(npe ?AI3) \
      "Célula temperatura: " $(npe ?AI4)
done

답변2

Bash에서 실시간 솔루션을 구현하는 것은 까다로울 수 있습니다.

여러 가지 방법을 사용하여 X초에 한 번 스크립트를 실행할 수 있습니다 watch. 이미 사용 가능한 것이 있다고 가정합니다 myScript.sh. X를 필요한 시간(초)으로 바꾸세요.

  1. watch -n X ./myScript.sh

  2. while sleep X; do ./myScript.sh; done

    고쳐 쓰다. 보기를 시뮬레이션하려면 반복 사이에 화면을 지워야 할 수도 있습니다. 스크립트 내부에서는 다음과 같습니다.

    while sleep X; do 
       clear; 
       command1;
       command2;
    done
    
  3. 위 옵션 중 하나를 스크립트 자체에 추가하십시오.

답변3

깜박이는 것은 명령이 값을 반환하는 데 시간이 걸리기 때문이라고 가정합니다. 이것이 나의 일반적인 해결 방법입니다.

cmds(){
  echo "Célula calibrada: " $(npe ?AI1);
  echo "Anemómetro: " $(npe ?AI2);
  echo "Célula temperatura: " $(npe ?AI3);
  echo "Célula temperatura: " $(npe ?AI4);
}

while true; do
  out="$(cmds)"
  clear
  echo "$out"
  sleep 1
done

아이디어는 마지막 순간에 화면을 지우는 것입니다.

답변4

Bash에서는 확실히 이 작업을 수행할 수 있습니다. 텍스트가 계속 깜박이면 이전 답변을 완전히 읽지 않은 것입니다.

clear화면을 마주해야 해요앞으로이후가 아닌 새로운 값을 에코합니다.

관련 정보