Linux

顯示從命令更改實時值的 Bash 腳本

  • November 18, 2019

在 Linux 機器上,我有一系列提供不同感測器狀態數值的命令。

這些命令的呼叫類似於以下內容:

$ command1
5647
$ command2
76
$ command3
8754

這些值是實時變化的,每次我想檢查其中一個的狀態時,我都必須重新啟動命令……這對我沒有任何好處,因為我需要雙手來操作硬體。

我的目標是製作一個簡單的 Bash 腳本來呼叫這些命令並保持值更新(實時非同步或每 x 秒刷新一次值),如下所示:

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

其中xy和是變化的值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

我的輸出帶有令人討厭的閃爍:

在此處輸入圖像描述

在 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
  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

引用自:https://unix.stackexchange.com/questions/552125