web-dev-qa-db-ja.com

スクリプト出力をファイルに記録する

GPUのクロックと温度を監視する簡単なスクリプトを書きました。ターミナルで表示される以外に、その出力を外部ファイルに記録することを望みました。どうすればこれを達成できますか?参照用の以下の私のスクリプト:

#!/bin/bash

watch -n 1 "amdconfig --odgc" "amdconfig --odgt"

「ウォッチ」コマンドを使用しているため、質問は重複していません。

4

あなたは本当にそれをしたくありません。 watchは、ええと、watchedとなるように設計されています。その出力は、リダイレクトを非実用的にするような方法でフォーマットされます。 teeのようなものを使用して実際にそれを行うことができますが、出力は多くの空行であり、有用な情報はほとんどありません。

したがって、watchの特定のケースでは、同じことを行う独自の小さなスクリプトを作成する方が適切です。

#!/bin/bash

## This is an infinite loop, the script will run until you kill it
while :; do
  ## Run the command whose output you want to monitor
  amdconfig --odgc" "amdconfig --odgt

  ## Wait for 2 seconds. This mimics what the watch command does
  ## and also avoids spamming your cpu. 
  sleep 2
done

そのスクリプトを~/bin/amdwatchまたは任意の名前で保存し、実行可能(chmod +x ~/bin/amdwatch)にしてから、その出力をファイルにリダイレクトします。

~/bin/amdwatch > amdwatch.log 

手動で停止するまでスクリプトが実行され、2秒ごとにamdwatchコマンドが実行され、その出力がamdwatch.logに保存されます。

ほとんどのスクリプトで、探しているのはscript.sh > outputFile.txtまたはscript.sh >> outputFile.txtです。 端末出力をファイルに保存する方法 を参照してください。

4
terdon

watchは、デフォルトでstdoutに出力するたびに画面をクリアします。そのため、while loopを遅延させて使用することをお勧めします。次に、scriptコマンドまたはteeを使用して、出力をログに記録できます。例えば、

while [ 1 ]; do df ; sleep 0.25; done | tee -a MY_FILE

両方が画面に表示され、ファイルに移動して、コマンドの各実行を追加します

2