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 )

我们发送所有stdouttocommand然后/dev/null重定向stderrto 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 回答