在下面的测试脚本我运行一个基本的协进程,以使echo
内置的,在后台运行,重视其标准输出:后台处理重定向到COPROC
#!/bin/bash
# TEST 1
coproc /bin/sleep 100
echo >&${COPROC[1]} &
脚本总是失败,因为没有明显的原因,给输出:
./test.sh: line 4: ${COPROC[1]}: Bad file descriptor
不知是否正确的语法应该是相当这一个(重定向符号前移动):
#!/bin/bash
# TEST 2
coproc /bin/sleep 100
echo & >&${COPROC[1]}
这个第二个例子似乎很有效,因为它在执行过程中没有报告错误,但是使用这种语法,重定向在实践中不会执行;事实上,考虑这个其他测试:
#!/bin/bash
# TEST 3
/bin/echo abc & >xfile
测试3创建文件xfile
,但不写东西进去。奇怪的是,试图再次定位重定向后的符号使echo
做工精细:
#!/bin/bash
# TEST 4
/bin/echo abc >xfile &
测试4串abc
内创建文件xfile
。
对导致coproc
重定向错误的原因有一些想法或正确的语法是什么?
在TEST 2和TEST 3中,&终止前面的命令,所以输出重定向适用于下面的(空)命令,而不是后台进程。由于TEST 1没有终止&,我不知道它是否可能是bash iteself中的解析错误。 – chepner