Bash スクリプト - Bash スクリプトからの出力をファイルにリダイレクトするにはどうすればよいですか?

Bash スクリプト - Bash スクリプトからの出力をファイルにリダイレクトするにはどうすればよいですか?

メモリ使用量、スイッチ、スレッドなどを表示する基本ファイルがあり、その結果をログ ファイル、つまりテキスト ファイルに出力したいと考えています。現時点では、「./file.sh 1 1」と入力してコマンドを起動していますが、最初の引数はコマンドを実行するループの数を決定し、2 番目の引数はコマンドがスリープする時間を決定します。基本的には、これらすべてのコマンドをループで実行する while です。

結果をログファイルにエクスポートして追跡したいと思っています。最終的な目標は、これを 24 時間実行してすべての結果をログに記録することです。

基本的に、これらすべてをログ ファイルに出力したいのですが、 > log.txt または >> log.txt を追加すると、希望どおりにログ ファイルに出力されます。ただし、ターミナルには表示されません。

    echo "Threads:"
        grep -s '^Threads' /proc/[0-9]*/status | awk '{ sum += $2; } END { print sum; }' > log.txt
        echo""
        echo "Free memory:"
        grep MemFree /proc/meminfo > log.txt
        echo ""
        echo "Firefox usage"
        pidstat -C firefox -w -u > log.txt
        echo ""

答え1

ファイルにログを記録し、stdout に出力したい場合は、以下を試してみてくださいtee

    echo "Threads:"
    grep -s '^Threads' /proc/[0-9]*/status | awk '{ sum += $2; } END { print sum; }' | tee -a log.txt
    echo""
    echo "Free memory:"
    grep MemFree /proc/meminfo | tee -a log.txt
    echo ""
    echo "Firefox usage"
    pidstat -C firefox -w -u | tee -a log.txt
    echo ""

すべてをログ ファイルに送信する場合は、代わりに以下を使用できます。

(
    echo "Threads:"
    grep -s '^Threads' /proc/[0-9]*/status | awk '{ sum += $2; } END { print sum; }'
    echo""
    echo "Free memory:"
    grep MemFree /proc/meminfo
    echo ""
    echo "Firefox usage"
    pidstat -C firefox -w -u
    echo ""
) | tee -a log.txt

関連情報