Linux 시스템에는 다양한 센서 상태에 대한 값을 제공하는 일련의 명령이 있습니다.
이러한 명령의 호출은 다음과 유사합니다.
$ command1
5647
$ command2
76
$ command3
8754
값은 실시간으로 변경되며 값 중 하나의 상태를 확인하고 싶을 때마다 명령을 다시 시작해야 합니다... 하드웨어를 작동하려면 양손이 필요하기 때문에 아무 소용이 없습니다. .
내 목표는 다음과 같이 이러한 명령을 호출하고 값을 업데이트된 상태로 유지하는(실시간으로 비동기식으로 또는 x초마다 값을 새로 고치는) 간단한 Bash 스크립트를 만드는 것입니다.
$ ./myScript.sh
command1: x
command2: y
command3: z
command4: v
그 중 x
, y
, z
및 v
값이 변경됩니다.
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를 필요한 시간(초)으로 바꾸세요.
watch -n X ./myScript.sh
while sleep X; do ./myScript.sh; done
고쳐 쓰다. 보기를 시뮬레이션하려면 반복 사이에 화면을 지워야 할 수도 있습니다. 스크립트 내부에서는 다음과 같습니다.
while sleep X; do clear; command1; command2; done
위 옵션 중 하나를 스크립트 자체에 추가하십시오.
답변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
화면을 마주해야 해요앞으로이후가 아닌 새로운 값을 에코합니다.