我想运行一个程序“A”,将其输出转到另一个程序“B”的输入,以及将stdin转到输入“B”。如果程序“A”关闭,我想“B”继续运行。将stdin _and_ stdout重定向到管道
我可以轻松地将输出重定向到B输入:
./a | ./b
而且,如果我愿意,我可以将stderr组合成输出:
./a 2> & 1 | ./b
但我无法弄清楚如何将stdin合并到输出中。我的猜测是:
./a 0> & 1 | ./b
但它不起作用。
下面是一个并不需要我们重新编写了所有的测试程序测试:
$ echo ls 0>&1 | /bin/sh -i
$ a b info.txt
$
/bin/sh: Cannot set tty process group (No such process)
如果可能的话,我想这样做在命令行中使用这个唯一的bash重定向(我不知道想要编写一个C程序来分离子进程,并且每次我想要将stdin重定向到管道时执行任何复杂的操作)。
也许'tee'命令会帮助你。祝你好运。 – shellter
正如我想到的,@markie,我想知道你在做什么。这是一个源脚本(例如'。〜/ script.sh')会做你想要的吗? –
@Arthur这是在玩一个Linux编程游戏时出现的。 http://www.overthewire.org/wargames/vortex/我还没有做到这一点,但迄今为止两个层面都遇到了这个问题。基本上,如果你给程序一个正确的值,它使用exec()或类似的东西给你一个shell“/ bin/sh -i”。出于某种原因,bash的行为非常奇怪,其输入重定向如此。如果在我付出更多努力之前耗尽了输入,它会变得很奇怪,这导致了笨重的黑客http://axtaxt.wordpress.com/2010/12/28/overthewire-vortex-level10-2/我有一个感觉我们缺少一个明显的解决方案。 – markie