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

Jas*_*n R 38 pipe shell-script stdin

我有一个可以启动用户交互式 shell 的可执行文件。我想在 shell 启动时先注入一些命令,然后允许用户进行交互式会话。我可以使用以下方法轻松做到这一点echo

echo "command 1\ncommand 2\ncommand3" | ./shell_executable
Run Code Online (Sandbox Code Playgroud)

几乎有效。问题是,一旦完成回显我的命令,为进程的标准输入提供数据的 echo 命令就会命中 EOF。这个 EOF 会导致 shell 立即终止(就像您在 shell 中按下了 Ctrl+D 一样)。

有没有办法将这些命令注入 stdin 而不会导致 EOF 之后?

Gow*_*ham 45

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

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

这就是诀窍。cat将输出泵echo入 shell_executable 的输入流并等待更多输入直到 EOF。


jw0*_*013 21

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

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

cat custom_commands_file - | ./shell_executable
Run Code Online (Sandbox Code Playgroud)

cat将解释-为标准输入。