2014-02-07 178 views
0

是否可以使用C程序写入正在运行的shell(Bash)的stdin?其实我想用C程序中的bash执行命令,而不使用exec*()系统调用。从C程序执行shell命令

+1

最终,您将需要一个fork()和一个exec *()调用运行'bash'程序;没有任何真正的选择(除非你数['posix_spawn()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn.html),而我没有)。那么,在'bash'上组织管道的问题是为了处理标准输入(从你的程序?)和标准输出(到你的程序?)和标准错误,以及正确的shell选项('-i'?)。你预计在你的俘虏外壳中执行什么样的命令? –

+0

我只是想从我的程序中获取一个字符串输入,并将此字符串发送到任何正在运行的bash实例,并且bash会为我执行执行并将相应的输出发送到我的程序。 –

+0

请注意,您不能随意将您的命令发送给Bash的任意运行实例;他们中的大多数都与别人的工作挂钩,并且位于错误的当前目录中,并且设置了错误的环境等等。你将需要运行你自己的shell;如果你小心的话,你不必为每个单独的命令运行一个新的shell,但是你需要fork()和exec *()和你通信的bash。你需要两到三个管道(shell的标准输入,shell的标准输出,可能是shell的标准错误),你需要考虑如何读取它们。 –

回答

0

/bin/echo是一个C程序,通常。

/bin/echo ls | sh 

Voilà!一个C程序刚刚写入正在运行的shell的标准输入,并执行了一条命令。这显然是可能的。

man popen现在是你的朋友。 (超越用户的范围,超出用户的范围,system()以及需要引用等讨论)

+0

还有一个程序'/ bin/echo';但是,大多数shell都有一个内置命令'echo'。 –

+0

使用内置模块会不必要地回答问题。尽管可以指向'/ bin/echo'并说“这是一个编译好的C程序,在那个文件里,”。 – JdeBP