コマンドのリアルタイム値の変更を表示する 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秒に1回スクリプトを実行できます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画面に面する必要があります。今後以降ではなく新しい値をエコーし​​ます。

関連情報