POSIX スクリプトから出力を /dev/fd/x にリダイレクトします。ここで、/dev/fd/x はプロセス置換を置き換えます。

POSIX スクリプトから出力を /dev/fd/x にリダイレクトします。ここで、/dev/fd/x はプロセス置換を置き換えます。

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

関連情報