在下面的测试脚本中,我运行了一个基本的协同进程echo
,在后台运行的内置程序附加了它的标准输出:
#!/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 &
测试 4xfile
在字符串中创建文件abc
。
了解导致coproc
重定向错误的原因或正确的语法是什么?