最初のステップでは、そのスクリプトを端末で直接実行するのではなく、ファイルにカプセル化します (その過程で UUOC 賞を失います)。
#!/bin/bash
{
awk 'NR%4 == 2 { print $1 }' file.txt | sort | uniq -c | sort -gr >>output.txt
} 2>error.log
これにより、すべてのエラー メッセージがファイルに取り込まれますerror.log
。その後、診断情報を追加できます。
#!/bin/bash
{
date >&2
set -x
awk 'NR%4 == 2 { print $1 }' file.txt | sort | uniq -c | sort -gr >>output.txt
date >&2
} 2>error.log
これで、いつ開始され、いつ終了したかという情報が得られました。にいるのでbash
、必要に応じてパイプライン内の各プロセスの終了ステータスを取得するように手配できるため、どのコマンドがどのステータスで終了したかを正確に知ることができます。どのプロセスが強制終了されたかについてのメッセージを受け取る場合と受け取らない場合がありますが (プロセスが外部シグナルによって強制終了された場合)、プロセスが自発的に終了した場合は、標準エラーにメッセージを出力する必要があります (それがその目的です。また、エラーを標準出力ではなく標準エラーに出力することが重要である理由)。
このスクリプトを使用すると、標準出力が にoutput.txt
、標準エラーが に送信されerror.log
ます。スクリプトは標準入力を使用しません (データは から取得されますfile.txt
)。したがって、これを実行するnohup
か、単にバックグラウンドで実行することができます&
。
file.txt
名前をコマンド ライン パラメータにすることをお勧めします。出力ファイルとログ ファイルを構成可能にしたい場合があります。日付出力には別の形式を使用することをお勧めします。そのすべてが微調整可能です。しかし重要な点は、それをシェルスクリプトに入れ、そのようなことを単純かつ体系的に処理できるようにすることです。