あなたによると、スクリプトエラーを記録する最良の方法は何ですか?
以下を試しましたが、何も達成されていないようです。 (例外を追加しました。)ユーザーに権限がないため、この検索コマンドは機能しません。/ホーム/データ/職場/ディレクトリ。
1.)
$(find /home/data/work/. -type f -delete) >log.txt 2>&1
これは私の電子メールに何も書きません。ログ.txt
2.)
find /home/data/work/. -type f -delete >log.txt 2>log.txt
ここで $() なしでコマンドを実行するのは間違っているようです。
3.)
function log_this() {
echo "$(date): $*" | tee -a log.txt
}
$(find /home/data/work/. -type f -delete) || { log_this "error"; exit 1; }
これはメッセージ「エラー」をログファイルに書き込みますが、ここではコマンドからlog_this関数にエラーをリダイレクトできません。
スクリプトログを生成する良い方法はありますか? $()を使用して、カスタムメッセージと生のエラーをログファイルに書き込むことができます。
答え1
次のいずれかで正しいソリューションをバイパスしているようです。
- の出力を
find
コマンドとして実行します(find
オプション1と3のようにコマンド置換に使用し、そのコマンド置換をコマンドとして使用すると発生します)。または - 出力ストリームとエラーストリームをにリダイレクトします
log.txt
。
正しい変化は
find ... >log.txt 2>&1
つまり、コマンドを実行して出力をファイルにリダイレクトし、エラーストリームも標準出力がある場所にリダイレクトします。
エラーのみを記録するには、標準出力をリダイレクトしないでください。
find ... 2>log.txt
moreutils
パッケージには、ts
コマンド出力からタイムスタンプを取得するために使用できるコマンドがあります。
find ... 2>&1 >/dev/null | ts >log.txt
上記のコマンドは標準出力を削除しますfind
が、エラー出力にタイムスタンプを追加しますlog.txt
。