7

我有一个程序(不是我写的),它不是为了从文件中读取命令而设计的。在 STDIN 上输入命令非常乏味,所以我希望能够通过将命令写入文件中以供重用来自动化它。麻烦的是,如果程序遇到 EOF,它会无限循环,试图在下一个命令中读取,将无尽的菜单选项洪流放到屏幕上。

我想做的是通过管道将包含命令的文件放入程序中,然后使用某种 shell 魔术让它在遇到文件的 EOF 时从文件切换到 STDIN。

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

有什么想法吗?感谢您的帮助!

编辑:

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

4

4 回答 4

16

我会做类似的事情

(cat your_file_with_commands; cat) | sh your_script

这样,当带有命令的文件完成后,第二个文件cat将使用您之后在标准输入上键入的任何内容提供您的脚本。

于 2009-10-14T07:22:37.343 回答
3

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

cat your_file_with_commands - | sh your_script
于 2015-06-04T00:29:53.347 回答
2

我认为expect会为此工作。

于 2009-10-13T16:37:23.497 回答
1

您是否尝试过使用类似tail -f commandfile | command 我认为应该将文件的行通过管道传输到命令而不关闭文件描述符的东西。如果未捕获所有行,则用于-n指定要通过管道传输的行数。tail -f

于 2009-10-13T15:42:07.740 回答