在管道命令中从文件内容切换到STDIN? (Linux Shell)

时间:2009-10-13 15:38:38

标签: bash file shell named-pipes pipe

我有一个程序(我没写过),它不是为了从文件中读取命令而设计的。在STDIN上输入命令非常繁琐,所以我希望能够通过在文件中编写命令来重新使用它来实现自动化。麻烦的是,如果程序遇到EOF,它会无限循环尝试读取下一个命令,在屏幕上放下无数的菜单选项。

我希望能够做的是通过管道将包含命令的文件包含到程序中,然后使用某种shell魔法让它在文件的EOF中从文件切换到STDIN。

注意:我已经考虑过使用带有' - '的猫作为STDIN。不幸的是(之前我不知道),管道命令等待第一个程序的输出在启动第二个程序之前终止 - 它们不是并行运行的。如果有一些方法可以使程序与这种管道动作并行运行,那就行了!

有什么想法?谢谢你的帮助!

编辑:

我应该注意,我的目标不仅是阻止系统到达命令文件的末尾。当文件命中EOF时,我希望能够继续从键盘输入命令。

4 个答案:

答案 0 :(得分:15)

我会做像

这样的事情
(cat your_file_with_commands; cat) | sh your_script

这样,当带有命令的文件完成后,第二个cat将为您的脚本提供随后在stdin上键入的任何内容。

答案 1 :(得分:2)

我认为expect对此有用。

答案 2 :(得分:2)

与Idelic答案相同,语法更简单;)

cat your_file_with_commands - | sh your_script

答案 3 :(得分:1)

您是否尝试过使用类似tail -f commandfile | command之类的内容我认为应该在不关闭文件描述符的情况下将文件的行传递给命令。如果-n无法捕获所有行,请使用tail -f指定要管道的行数。