将数据管道传输到进程的标准输入而不会导致EOF之后


33

我有一个启动用户交互外壳的可执行文件。我想在启动Shell时首先注入一些命令,然后允许用户进行交互式会话。我可以使用以下命令轻松完成此操作echo

echo "command 1\ncommand 2\ncommand3" | ./shell_executable

几乎可行。问题在于,在回显我的命令后,正在馈送进程的stdin的echo命令会击中EOF。此EOF导致外壳程序立即终止(就像您在外壳程序中按Ctrl + D一样)。

有没有一种方法可以将这些命令注入到stdin中,而不会在之后引起EOF?


您是否尝试过./shell_executable在命令列表的末尾添加?尽管您将有两个正在运行的实例(父级和子级),但这可能会继续进行下去。
goldilocks 2013年

Answers:


40

stackoverflow的类似问题中找到了这个聪明的答案

(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable

这可以解决问题。cat会将echo输入的输出泵入shell_executable的输入流,并等待更多输入,直到EOF。


@ jw013你是对的。我编辑了帖子。谢谢。当我尝试不带括号时,我cmd 1回头看了一下,但没有意识到应该是由cmd 1
Gowtham 2013年

这项工作真棒!你刚刚救了我很多时间。谢谢!!
jaggedsoft's

22

最干净的方法可能是寻找类似bash--rcfile选项。将您的自定义命令放在您的自定义文件中,然后将其传递到交互式外壳程序以在启动时运行。

如果不存在这样的选项,您还可以尝试以下操作:

cat custom_commands_file - | ./shell_executable

cat将解释-为标准输入。


很好的解决方案
dctremblay
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.