【发布时间】:2014-03-06 10:21:32
【问题描述】:
是否可以使用 C 程序写入正在运行的 shell (Bash) 的标准输入?实际上,我想在我的 C 程序中使用 bash 执行命令,而不使用 exec*() 系统调用之一。
【问题讨论】:
-
最终,您将需要一个
fork()和一个exec*()调用来运行bash程序;没有任何真正的选择(除非你算上posix_spawn(),而我没有)。然后是组织bash上的管道的问题,以处理标准输入(来自您的程序?)和标准输出(到您的程序?)和标准错误,以及正确的shell 选项(-i?)。你预计在你的强制 shell 中执行什么样的命令? -
我只想从我的程序中获取一个字符串输入并将这个字符串发送到任何正在运行的 bash 实例,然后 bash 会为我执行并将相应的输出发送到我的程序。
-
请注意,您不能随意将命令发送到任何正在运行的 Bash 实例;他们中的大多数都忙于做别人的工作,并且在错误的当前目录中并且设置了错误的环境等等。您将需要运行自己的 shell;如果你小心的话,你不必为每个单独的命令运行一个新的 shell,但你需要
fork()和exec*()与bash通信。您将需要两个或三个管道(shell 的标准输入、shell 的标准输出、shell 可能单独的标准错误),并且您需要考虑如何阅读它们。