スクリプト内部から標準出力としてログする方法

スクリプト内部から標準出力としてログする方法

以下を使用してログインできることを知っています。tee

しかし、実行中にスクリプト内でログインしたいと思いますstdout

たとえば、私のコードは次のようになります。

    names=$(print("name1 name2 name3 name4"))

    for name in names
    do
       echo "Current Name: " $name 
       related_job= ps -ef | grep $name | awk '{print $9}' >> File.dat
       echo "related job: " $related_job
    done 

今、このチャンクは間違いなくechostdoutにありますが、ログファイル(例えばscript_name.log

また、スケジューラを介してスクリプトを呼び出し、使用できない制約を訴えますscript_name | tee log_file。名前でスクリプトを呼び出すことができます。

この問題を解決する方法はありますか?

ベストアンサー1

を使用している場合は、bashbashのを組み合わせてexec >&スクリプトのすべての出力をリダイレクトし、プロセス置換を実行することもできます。

たとえば、スクリプトの先頭に次の内容を追加します。

LOGFILE='/tmp/teelog.log'
savelog "$LOGFILE"
exec &> >(tee "$LOGFILE")

savelogこれはstdoutとstderrをstdoutと$ LOGFILEにリダイレクトします。これは、スクリプトが実行されるたびに前のログを回転して保持するために使用されます(デフォルトは7)。

おすすめ記事