質問: コマンドからのリアルタイム値の変化を示すbashスクリプト linuxマシンには、さまざまなセンサーの状態の数値を提供する一連のコマンドがあります。これらのコマンドの呼び出しは、次のようなものです。$ command1 5647 $ command2 76 $ command3 8754 これらの値はリアルタイムで変化し、そのうちの1つのステータスを確認するたびに、コマンドを再起動する必要があります...ハードウェアを操作するには両手が必要なので、これはあまり役に立ちません。私の目標は、次のようにこれらのコマンドを呼び出して値を更新し続ける(リアルタイムで非同期に、またはx秒ごとに値を更新する)単純なbashスクリプトを作成することです。$ ./myscript.sh command1: x command2: y command3: z command4: v ここで、x、y、zおよびvは変化する値です。バッシュはこれを簡単かつ効率的に可能にしますか?または、pythonなどの別の言語で実行することを選択する必要がありますか?update with more info:私の現在のスクリプトは:#!/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 迷惑なちらつきで出力が表示されます。
回答: これはtputを使用して各行を個別に更新するため、ちらつきのない50行を実行します。これを証明するために、各行の間に0.01のスリープを入れました。arg yを指定してスクリプトを実行すると、ターミナルウィンドウがカーソルの配置に使用する例が表示されます。エコーでエスケープをハードコードしました。あなたのものは異なる場合があります。移植性のために、tputを使用してシーケンスを動的に生成する必要があります。パフォーマンスを得るには、アプリに必要なすべてのtputシーケンスを事前に取得し、シェルに格納する必要があります。また、固定テキストを一度配置したら、可変部分を変更するだけです。画面位置はtput argsの(0、0)から始まることに注意してください。また、画面コマンドの先行ゼロは8進数として解釈されるため、printfを使用して可視の行番号を再フォーマットします。また、更新後にカーソルを邪魔にならないように((0,0)のように)移動することもできます。#! /bin/bash #.. see what a cursor position is on the current terminal. [[ "${1}" == y ]] && { for r in {0..19}; do tput cup ${r} 15 | od -an -t ax1 done exit } tput clear while sleep 1; do for k in {1..50}; do sleep 0.01 rw=$( printf '%.2d' ${k} ) ts=$(date "+%y-%m-%d %h:%m:%s.%n") echo -n -e "\e[${k};1h${rw} ${ts}" done echo -n -e "\e[52;1h" done