エラーが発生した場合にのみいくつかの行を追加するようにログ形式を指定してください。

エラーが発生した場合にのみいくつかの行を追加するようにログ形式を指定してください。

このようなファイルを入手して出力をファイルにインポートし、エラーを別のログファイルに送信しようとします。

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

説明する:

  1. このfind部分は以前のバージョンと同じです。
  2. awk部分 - 入力に行がない場合(エラーが発生しない)、何も印刷されません。
    • NR == 1 {print "start message"}- 1行目の場合は「start message」を出力します。
    • {print}- すべての入力ラインを印刷します。
    • END {if(NR > 0) print "end message"}- 実行が終わったら、入力(NR- レコード数)から取得した行があることを確認してください。その場合、「終了メッセージ」が印刷されます。

おすすめ記事