Bash 将stdout重定向到正在运行的进程

Bash 将stdout重定向到正在运行的进程,bash,redirect,stdout,Bash,Redirect,Stdout,我知道如何将stdout重定向到文件,但是否可以将stdout重定向到进程(linux环境) 例如,如果我通过“^Z”将一个活动SSH会话移动到后台,是否有办法在本地主机上启动另一个程序并将其标准输出重定向到SSH会话 谢谢 有时像这样的把戏 echo "something" > /proc/pid-of-process/fd/0 有效,但如果它们链接到伪终端,则不会 所以,这里有一种方法可以满足你的需求 **将SSH连接配置为使用证书/无密码登录 创建命名管道(例如mkfifomypi

我知道如何将stdout重定向到文件,但是否可以将stdout重定向到进程(linux环境)

例如,如果我通过“^Z”将一个活动SSH会话移动到后台,是否有办法在本地主机上启动另一个程序并将其标准输出重定向到SSH会话

谢谢

有时像这样的把戏

echo "something" > /proc/pid-of-process/fd/0
有效,但如果它们链接到伪终端,则不会

所以,这里有一种方法可以满足你的需求

  • **将SSH连接配置为使用证书/无密码登录
  • 创建命名管道(例如
    mkfifomypipe
  • 使用tail读取管道并将其传递给SSH进程,例如:

    tail-f mypipe | ssh-t-tuser@somehost.com

  • 将要进入ssh会话的任何内容发送到命名管道中,例如:

    echo“ls-l”>mypipe

    所以,如果你需要从另一个程序中导入内容,你只需要这样做

    /my program>/path/to/mypipe

  • 你完了

  • 一些注意事项:

  • **是可选的,但如果不这样做,则必须在启动SSH会话的终端上键入密码,不能通过管道传递密码。事实上,如果您尝试,它将在SSH连接完成后显示为通过管道的纯文本
  • 您的SSH会话现在只与命名管道一样安全。只是一个提醒
  • 一旦从原始终端连接,您将无法使用SSH会话。您必须使用命名管道
  • 您可以始终在原始终端中按住ctrl+c组合键来终止SSH进程并恢复终端的功能
  • 任何输出都会出现在原始终端上——可能很明显,但我只想指出它
  • tail
    -f
    选项对于防止SSH进程在管道为空时接收EOF是必需的。还有其他方法可以防止管道关闭,但我认为这是最简单的方法
  • ssh
    -t-t
    选项强制tty分配,否则它会抱怨,因为您的案例中正在通过管道传输stdin 最后,几乎肯定有一个更好的方法来做你想做的事情——如果这是严肃的/长期的,你应该考虑找到它。

  • 我能想到一些我会尝试使用命名管道玩的奇怪的游戏——但这并不好看。这几乎是不相关的,但我不能充分推荐这篇文章。它解释了下面命名管道解决方案工作的原因。