シェルスクリプトから対話型コマンドの出力を印刷します。

シェルスクリプトから対話型コマンドの出力を印刷します。

echoシステム状態を監視するためにCGIスクリプトを作成しているため、その情報を端末に使用または出力する必要がありますcat。問題は、systatこれが対話型コマンドであるため、画面に何も印刷しないことです。

試してみましたsystat | echoが、systat | cat前者は結果が出ませんが、後者はsystat

編集する

さて、明確にしてみましょう。デフォルトでは、同じシェルスクリプトを要求しますmonitor.sh。 exec を使用して実行すると、./monitor.sh新しいプロセスが開始され、結果が出力され、終了systatします。

次のようにする必要があります。

root@HPC:~/playground # ./monitor.sh
                    /0   /1   /2   /3   /4   /5   /6   /7   /8   /9   /10
     Load Average   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 12.0

                    /0%  /10  /20  /30  /40  /50  /60  /70  /80  /90  /100
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root@HPC:~/playground # 

答え1

これsystatFreeBSDのマニュアルページ説明する、

  • 「グローバル」コマンドソルバーはすべてのキーボード入力を処理します。
  • これquitコマンドは「グローバル」コマンドソルバーによって解釈されます。systat私たちにやめると言います。
    • これquitコマンドは次のように省略できます。 q
  • コマンドラインに「showコマンド」を提供できます。-。 (かどうかは明示的に言及されていません。quit「表示コマンド」に適しています。 )

だから残念ながら、これはsystat -q動作しません。その他試してみる:

  • systat -quit
  • (sleep 5; echo quit) | systat
    • (これをで入力する必要があるかもしれません。sh -c '(sleep 5; echo quit) | systat'
    • (sleep 5; echo :quit) | systat または を実行する必要がありますsh -c '(sleep 5; echo :quit) | systat'。 (追加の注意事項:.)
  • systat& sleep 5; kill "$!"
    • (これをで入力する必要があるかもしれません。sh -c 'systat& sleep 5; kill "$!"'

希望する結果を得るには、睡眠スケジュールを調整する必要があります。

関連情報