ログ=/tmp/log.txt
次の構文は、すべての標準出力と標準エラーをlog.txtファイルに書き込みます。
実行 > $log 2>&1
私たちが望むのは、stdoutとstderrをlog.txtに書き込み、stdout + stderrをコンソールに書き込むことです。
可能ですか?
答え1
これを行うより簡単な方法があるかもしれませんが、一般的な解決策は次のとおりです。
#!/bin/bash
trap 'rm $TMP' 0
TMP=$(mktemp)
rm $TMP
mkfifo $TMP
tee < $TMP ${log:-/tmp/log.txt} &
exec > $TMP 2>&1
他のすべてのプロセスがfifoで読み書きできるため、ここに大きなセキュリティと信頼性の問題があることは言うまでもありません。この種のタスクを実行するには、スクリプトの出力をtee
。