如果我想在屏幕上显示“ aaa”:
(1)$: echo aaa | cat ... works OK
(2)$: echo aaa | ( cat ) ... works OK
(3)$: echo aaa | ( cat & ) ... NOT working
(4)$: ( echo aaa & ) | cat ... works OK
(5)$: echo aaa | ( cat <&0 & ) ... works ok in BASH (but not in SH)
(6)$: echo aaa | ( cat <&3 & ) 3<&0 ... works ok in BASH and SH
(3)和(4)->分离过程的结果仍然连接了可以控制,使用,重定向的输出,但是没有输入!
我的问题是:有人了解第(5)行的原因和方式吗?
...“ <&0”是“ 0 <&0”的缩写,为什么将0重定向到0是解决方案,并且在分离过程的输入之后真正发生了什么。Subshell并不是问题,使用大括号{...}代替(...)可以提供相同的结果。
...和问题2:是否有比“第6行”更好的“向分离过程提供输入”的解决方案。
是的,根据POSIX的要求,在后台启动的命令&
的标准输入从重定向/dev/null
。
的确
{ cmd <&3 3<&- & } 3<&0
是解决它的最明显的方法。
目前尚不清楚为什么要在后台运行部分管道。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句