~ bash --version
GNU bash, version 3.2.51(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2007 Free Software Foundation, Inc.以下命令的工作方式与预期一致:
~ ls hdfhdfhdhfd 2> >(wc -l)
1..。但这不起作用,我已经想不出原因了:
~ truss -eaf bash -c 'true' 2> >( some command to process text)>()中的命令最终阻塞,等待输入。
如果我这样做:
~ (true; truss -eaf bash -c 'true') 2> >( some command )..。它像预期的那样工作,尽管这不起作用:
~ ( truss -eaf bash -c 'true') 2> >( some command )
# ^^^^^ ... note the 1st command is missing如果我设置some command = dd bs=1,它将消耗并打印所有truss会在stderr上输出的文本,然后是块。
只有在solaris中使用truss时,我才不能在Linux中重现类似的行为。
发布于 2013-06-21 05:02:15
根据@ccarton的回复,我大致了解了正在发生的事情。举例说明:
~ truss -eaf /usr/bin/perl -e 'print "Test\n"; sleep 5' 2> >(dd bs=1 | wc -l)在另一个终端中,我可以看到这个父/子层次:
bash truss -eaf /usr/bin/perl -e printf "Test\n"; sleep 5 /usr/bin/perl -e printf "Test\n"; sleep 5bash dd bs=1 wc -l
truss正在等待外壳,但dd在关闭其标准输入之前不会退出...所以他们僵持不下。
~ truss -eaf -o >(some command) another command..。使some command在当前外壳下执行,因此truss永远不是它的祖先。
我在Linux中看到了相同的层次结构,但它不会死锁。
https://stackoverflow.com/questions/16368118
复制相似问题