以下を使用してログインできることを知っています。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
今、このチャンクは間違いなくecho
stdoutにありますが、ログファイル(例えばscript_name.log
。
また、スケジューラを介してスクリプトを呼び出し、使用できない制約を訴えますscript_name | tee log_file
。名前でスクリプトを呼び出すことができます。
この問題を解決する方法はありますか?
ベストアンサー1
を使用している場合は、bash
bashのを組み合わせてexec >&
スクリプトのすべての出力をリダイレクトし、プロセス置換を実行することもできます。
たとえば、スクリプトの先頭に次の内容を追加します。
LOGFILE='/tmp/teelog.log'
savelog "$LOGFILE"
exec &> >(tee "$LOGFILE")
savelog
これはstdoutとstderrをstdoutと$ LOGFILEにリダイレクトします。これは、スクリプトが実行されるたびに前のログを回転して保持するために使用されます(デフォルトは7)。