如何从独立程序访问标准输入/标准输出?

如何从独立程序访问标准输入/标准输出?

我试图了解如何访问进程的标准输入和标准输出。

我有一台只能通过 SSH 访问的远程计算机,并且我想在后台运行基于终端的程序。也就是说,我通过 ssh-terminal 以分离模式启动程序,以便可以关闭 ssh 连接。

这个程序有自己的基于终端的界面,它监听来自标准输入的用户输入并输出到标准输出。

我的问题是如何通过管道传输 stdin/stdout 以便远程计算机中的其他终端可以访问它?也就是说,我打开一个新的 ssh 终端,然后简单地访问分离的程序。

或者我如何通过管道输入/输出,以便可以通过 ssh 隧道到我的本地计算机并以相同的方式使用它?

我无法screen在远程机器上使用来达到效果,因为它太旧了,而且我无法升级它。也没有tmux安装。

然而,这两个程序都可以在本地计算机中访问,因此如果任何类型的隧道是可能的,那么它可能会解决问题。

答案1

可能有更好的方法来执行此操作,但您可以使用mkfifo创建两个 FIFO 文件并以将程序的输入和输出重定向到两个 FIFO 文件的方式运行命令/脚本。

因此,一旦您运行命令并创建了两个文件(并关闭了 SSH 连接),当您准备好向进程发送输入时,您只需使用 SSH 来回显您尝试发送的任何输入进入 FIFO 文件然后它会被重定向到正在运行的进程。

然后,输出将被发送到输出 FIFO,当准备好访问它时,任何需要访问它的程序都可以逐行读取输出。

公平警告,我现在不在计算机前,所以这可能不完全正确 - 我经常混淆 FIFO 还是常规旧临时文件是否是完成手头任务的正确工具(您可能只需要 FIFO对于输入并将输出重定向到通过mktemp) 创建的临时文件,但我怀疑最终的解决方案至少在某种程度上类似于我上面描述的内容,即一些重定向魔法。

祝你好运!希望其他人能够给您更具体的答案。

相关内容