stderrリダイレクトにタイムスタンプを追加する

stderrリダイレクトにタイムスタンプを追加する

私のコンピュータで実行すると、多くの出力を生成するスクリプトを実行しています。コンテンツに興味がないので、その出力をにリダイレクトし、/dev/nullファイルからエラーをキャッチします(スクリプトが失敗した場合にのみ興味があるため)。ただし、ファイルのエラーにはタイムスタンプは含まれていません。

stderrリダイレクトにタイムスタンプを追加する方法はありますか?これは私のコマンドですが、タイムスタンプを追加する方法がわかりません。

myScript.sh 2>> logfile.txt 1>/dev/null

日付を印刷するためにmyScript.shを変更することはできないので、それもオプションではありません。私は次のことを試しました:

myScript.sh 2>> logfile.txt << date

しかし、これはうまくいきません。

答え1

tsfromは、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)

関連情報