私のコンピュータで実行すると、多くの出力を生成するスクリプトを実行しています。コンテンツに興味がないので、その出力をにリダイレクトし、/dev/null
ファイルからエラーをキャッチします(スクリプトが失敗した場合にのみ興味があるため)。ただし、ファイルのエラーにはタイムスタンプは含まれていません。
stderrリダイレクトにタイムスタンプを追加する方法はありますか?これは私のコマンドですが、タイムスタンプを追加する方法がわかりません。
myScript.sh 2>> logfile.txt 1>/dev/null
日付を印刷するためにmyScript.shを変更することはできないので、それもオプションではありません。私は次のことを試しました:
myScript.sh 2>> logfile.txt << date
しかし、これはうまくいきません。
答え1
ts
fromは、moreutils
いくつかの出力の各行にタイムスタンプを追加するために使用できます。
myScript.sh 2>&1 > /dev/null | ts >> logfile.txt
同様の形式でタイムスタンプ形式を指定できますstrftime()
。
$ seq 4 | ts '%FT%.T%z:'
2023-06-06T14:11:15.244613+0100: 1
2023-06-06T14:11:15.244693+0100: 2
2023-06-06T14:11:15.244729+0100: 3
2023-06-06T14:11:15.244759+0100: 4
たとえば、マイクロ秒精度のISO8601タイムスタンプ形式です。
答え2
私もお勧めしますts
。そして出力プロセスの交換ここに適しています:
myScript.sh 2> >(ts >> logfile.txt) 1>/dev/null
# ............^ yes that space is required.
答え3
次のように、スクリプトを実行する前に印刷日を呼び出すことができます。
echo "$(date >> logfile.txt; ./myscript.sh 2>> logfile.txt 1>/dev/null)