1

私は今日いくつかの bash を調べていて、私が試したいくつかのスニペットには> >、私が受け取ったエラーの原因と思われるものが含まれていました。

スニペットの例:

command 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)

これが私が取り組んでいるものです。

$ bash --help
GNU bash, version 3.2.48(1)-release-(x86_64-apple-darwin12)

編集
ここに私が得ているエラーがあります:

file.sh: line 14: syntax error near unexpected token `>'
file.sh: line 14: `command 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)'
4

2 に答える 2

1

この質問への回答によると、Mac OS X 用の Bash 3.2.48 には、プロセス置換に関していくつかの制限があります。場合によってはサポートされますが、サポートされない場合もあります。あなたのケースは明らかにそうではないケースです。

そこでの最良/最も役立つ回答からの引用:

macports のもの (4.2.37 —/opt/local/bin/bashインストールされている場合は通常) は正常に動作します。[…] おそらく、このスクリプトには macports bash を使用したいかもしれません。

于 2012-11-10T03:56:43.373 に答える
0

問題を解決する最も単純な方法は次のとおりです。

while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done < <( { command > /dev/null ; } 2>&1 )

stdoutのすべてをに送信しcommandてから/dev/null、 にリダイレクトしstderrていstdinます。

またはその逆:

{ command > /dev/null ; } 2>&1 | while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done

これらの方法を使えば、ファイル記述子をいじる必要はありません!

終わり。

于 2012-11-11T16:36:03.090 に答える