我今天一直在寻找一些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)'
答案 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}}
使用这些方法,您不必过多使用文件描述符!
完成。