Linux
顯示從命令更改實時值的 Bash 腳本
在 Linux 機器上,我有一系列提供不同感測器狀態數值的命令。
這些命令的呼叫類似於以下內容:
$ command1 5647 $ command2 76 $ command3 8754
這些值是實時變化的,每次我想檢查其中一個的狀態時,我都必須重新啟動命令……這對我沒有任何好處,因為我需要雙手來操作硬體。
我的目標是製作一個簡單的 Bash 腳本來呼叫這些命令並保持值更新(實時非同步或每 x 秒刷新一次值),如下所示:
$ ./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
我的輸出帶有令人討厭的閃爍:
在 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
- 將上述選項之一添加到腳本本身。
您可以使用
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