使用>时为什么会出错? >在bash?

时间:2012-11-10 03:13:01

标签: bash

我今天一直在寻找一些bash的东西,我尝试过的一些片段包括> >,这似乎是我收到的错误的原因。

Example snippet

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)'

2 个答案:

答案 0 :(得分:1)

根据this question的答案,Mac OS X的Bash 3.2.48在进程替换方面有一些限制;它在某些情况下支持它而不支持其他情况。你的情况显然是一个没有的情况。

引用那里最好/最有帮助的答案:

  

来自macports的那个(4.2.37 - 通常/opt/local/bin/bash如果安装了它)工作正常。 [...]也许你可能想在这个剧本中使用macports bash。

答案 1 :(得分: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

或者相反:

{{1}}

使用这些方法,您不必过多使用文件描述符!

完成。