我知道如何将stdout重定向到文件,但是是否可以将stdout重定向到进程(linux环境)?
例如,如果我通过“〜^ Z”将活动的SSH会话移动到后台,有没有办法在我的本地主机上启动另一个程序并将其stdout重定向到SSH会话?
谢谢!
答案 0 :(得分:3)
有时像
这样的伎俩echo "something" > /proc/pid-of-process/fd/0
有效,但如果它们与伪终端相关联,则不会。
所以,这是实现你想要的一种方式。
mkfifo mypipe
)使用tail从管道读取并将其传递给SSH进程,例如:
tail -f mypipe | ssh -t -t user@somehost.com
将您想要进入ssh会话的任何内容发送到命名管道,例如:
echo "ls -l" > mypipe
因此,如果您需要从其他程序中管道填充,那么您只需要
./my-program > /path/to/mypipe
你已经完成了。
一些注意事项:
-f
tail
选项是防止SSH进程在管道为空时接收EOF所必需的。还有其他方法可以防止管道关闭,但在我看来这是最简单的。-t -t
的{{1}}选项会强制进行tty分配,否则会因为stdin在您的情况下使用管道而抱怨。