stdoutとstderrをタイムスタンプとともにログファイルに記録し、それを画面に表示したい。 stderrを標準出力にリダイレクトし、タイムスタンプをawkで追加してログファイルに追加します。 しかし、正しいエラーコードを取得するのに問題があります。ここBASH:stdoutとstderrをファイルに書き出して画面に表示する - >正しいエラーコードを得る
ロギング無し例:
$ less notexists.txt
notexists.txt: No such file or directory
$ echo $?
1
エラーコードここでロギングを有する例示
正しい:
$ less notexists.txt 2>&1 | awk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0; fflush(); }' | tee -a log.txt
[2017-10-23 17:19:59] notexists.txt: No such file or directory
$ echo ${PIPESTATUS[*]}
0 0 0
すべての3つのセクションのエラーコードが0であるが、最初のセクションは1でなければなりません。 私はこの問題がstderrのリダイレクトになる可能性があると思います。
タイムスタンプ付きのstdoutとstderrをログファイルに記録し、画面に表示して正しいエラーコードを取得する方法はありますか?
stderrをリダイレクトするのではなく複製することはできますか?
問題は、標準出力として端末以外のものを持つ「less」です。 '{less noexists.txt; echo $?; } |ネコ。 – chepner