【发布时间】:2011-06-23 14:36:05
【问题描述】:
我想运行一个程序“A”,让它的输出进入另一个程序“B”的输入,以及标准输入进入“B”的输入。如果程序“A”关闭,我希望“B”继续运行。
我可以轻松地将 A 输出重定向到 B 输入:
./a | ./b
如果我愿意,我可以将 stderr 合并到输出中:
./a 2>&1 | ./b
但我不知道如何将标准输入结合到输出中。我的猜测是:
./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命令会对您有所帮助。祝你好运。 -
当我想到它时,@markie,我想知道你想做什么。在这种情况下,采购脚本(例如
. ~/script.sh)会做你想做的事吗? -
@Arthur 这是在玩 linux 编程游戏时出现的。 overthewire.org/wargames/vortex我还没有做到很远,但是到目前为止有两个级别遇到了这个问题。基本上,如果你给程序一个正确的值,它会使用 exec() 或类似的方法给你一个 shell “/bin/sh -i”。出于某种原因,bash 的输入像这样重定向,这真的很奇怪。如果在我提供更多输入之前它就用完了输入,它可能会表现得很奇怪,这会导致笨拙的黑客攻击axtaxt.wordpress.com/2010/12/28/overthewire-vortex-level10-2 我感觉我们缺少一个明显的解决方案。
标签: linux shell redirect io-redirection