私は似たようなことをしたい:
command || log $error_from_last_command
パイプのように使い||
ながらもアクセスし続ける方法はありますか?stderr
command
私の意図はのエラーメッセージを処理することですがlog
、失敗した場合にのみ該当しますcommand
。表示されたコピーを読んでいますが、私のケースにどのように適用するのかわかりません。
ベストアンサー1
最初のコマンドが完了した後にのみ実行される他のプログラムでプログラムの出力を使用したい場合は、出力をファイルに保存するのがおそらく最も簡単な方法です。
errfile=$(mktemp)
if ! somecommand 2> "$errfile" ; then
log < "$errfile" # or log "$(cat "$errfile")" ?
fi
rm "$errfile"
出力をパイプするには、コマンドを同時に実行する必要がありますが、最初のコマンドが完了したときにのみ終了コードを取得します。
log < "$errfile"
もちろん、上記はエラーメッセージを標準入力に渡しますlog
(パイプを使用するのと同じように)。コマンドライン引数として渡すには、log "$(cat "$errfile")"
(1つの引数)またはlog $(cat "$errfile")
(インジェクションの使用、複数の引数をlog
参照)、またはlog "$(< "$errfile")"
(非標準、少なくともBashで動作します)を使用します。