问题描述
在下面的测试脚本我运行一个基本的协进程到了回声
内置的,在后台运行,高度重视其标准输出:
In the following test script I run an elementary coprocess to which the echo
built-in, run in background, attaches its standard-output:
#!/bin/bash
# TEST 1
coproc /bin/sleep 100
echo >&${COPROC[1]} &
脚本总是失败,没有明显的原因,给人的输出:
The script always fails, for no apparent reason, giving the output:
./test.sh: line 4: ${COPROC[1]}: Bad file descriptor
我不知道正确的语法应该是相当这一个(重定向符号前移动):
I wonder if the correct syntax should be rather this one (ampersand moved before redirection):
#!/bin/bash
# TEST 2
coproc /bin/sleep 100
echo & >&${COPROC[1]}
此第二实例似乎工作,因为它在执行过程中没有报告任何错误,但与此语法,在实践中不进行重定向;事实上,考虑这个其他测试:
This second example seems to work since it reports no errors during execution, but with this syntax, the redirection is not performed in practice; in fact, consider this other test:
#!/bin/bash
# TEST 3
/bin/echo abc & >xfile
测试3创建文件 xfile
,但不写东西进去。奇怪的是,试图再次定位符号重定向使后回声
做工精细:
Test 3 creates the file xfile
, but does not write anything into it. Curiously, trying again to position the ampersand after the redirection make the echo
work fine:
#!/bin/bash
# TEST 4
/bin/echo abc >xfile &
测试4创建文件 xfile
与字符串内 ABC
。
有什么原因造成的协处理器
重定向错误或者什么的正确语法是一些想法?
Have some idea on what is causing the coproc
redirection error or what the correct syntax is?
推荐答案
您已经得到了其他答案的:
You've got the answer elsewhere http://lists.gnu.org/archive/html/bug-bash/2012-06/msg00027.html:
协处理器文件描述符不提供给子shell。他们是
使用管道来实现,并留下管文件描述符打开
子shell进程会导致挂起,并不会终止正确,这
结果非常难以跟踪下和重现bug。
这篇关于后台处理重定向到协处理器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!