このようなファイルを入手して出力をファイルにインポートし、エラーを別のログファイルに送信しようとします。
find /some_dir -maxdepth 1 -mindepth 1 > outputFile.txt 2>>log.txt;
に別のログがありますlog.txt
。エラーの前後に数行(たとえば、検索でエラーを識別するために*****)を追加し、検索コマンドにエラーがある場合にのみ追加するにはどうすればよいですか?
ベストアンサー1
このnon_existent_dir
パラメータはfind
エラーメッセージを生成するために追加されます。
変数付き
#!/bin/bash
error=$(find . non_existent_dir 2>&1 > output.txt)
if (($?)); then
printf "%s\n%s\n%s\n" "message before" "$error" "message after" >> log.txt
fi
説明する:
2>&1 > output.txt
-stderr
(番号2)はstdout
(番号1)とstdout
にリダイレクトされますoutput.txt
。$?
-find
コマンド終了状態。find
すべてのファイルが正常に処理された場合は状態0で終了し、エラーが発生した場合は0より大きい状態で終了します。
変数なし
find . non_existent_dir 2>&1 > output.txt |
awk 'NR == 1 {print "start message"}
{print}
END {if(NR > 0) print "end message"}' >> log.txt
説明する:
- この
find
部分は以前のバージョンと同じです。 awk
部分 - 入力に行がない場合(エラーが発生しない)、何も印刷されません。NR == 1 {print "start message"}
- 1行目の場合は「start message」を出力します。{print}
- すべての入力ラインを印刷します。END {if(NR > 0) print "end message"}
- 実行が終わったら、入力(NR
- レコード数)から取得した行があることを確認してください。その場合、「終了メッセージ」が印刷されます。