stderr出力フィルタリングを含む可能なPOSIXスクリプトがあります。
exec <cmd> "$@" 2> >(grep -v "blih bluh blah")
プロセス置換が定義されていないため(例:[SC3001])、リダイレクトは発生しません。私はファイル記述子で遊んでこれを見ました。郵便はがきそして他の側面がありますが、次が何を意味するのかわかりません。
exec <cmd> "$@" 2>/dev/fd/5; exec grep -v "blih bluh blah" 5<&- >&2
おそらく
exec <cmd> "$@" 2>/dev/fd/5 && grep -v "blih bluh blah" 5<&- >&2
批判的な目を歓迎します。
編集する:私の意図はおそらく次に近いです。
exec {<cmd> "$@"; grep -v "blah" /dev/fd/5 5<&- >&2} 5<&2
ここでは、少なくとも2つの問題を感じることができます。(私)grepは";"次のように非同期で実行されます。(二)指定されたリダイレクト方法は、stderr
現在のシェル実行環境に影響します。
また、上記式 exec
の後には命令が出てくるので、新しいプロセスを生成せずに<cmd>でシェルを置き換える。 POSIX のマニュアルページでは、引数が指定された場合、その引数が <cmd> の引数として解釈されることを指定します。しかし、それはすべてですか"$@"
?
どのようにexec
処理しますかexec {<cmd1>; <cmd2>} 5<&2
?