Bash 在管道命令中从文件内容切换到标准输入?(Linux Shell)

Bash 在管道命令中从文件内容切换到标准输入?(Linux Shell),bash,file,shell,named-pipes,pipe,Bash,File,Shell,Named Pipes,Pipe,我有一个程序(我没有写),它不是用来从文件中读入命令的。在STDIN上输入命令是相当乏味的,因此我希望能够通过将命令写入文件以供重用来实现自动化。问题是,如果程序点击EOF,它会无限循环,试图读入下一个命令,并在屏幕上留下源源不断的菜单选项 我想做的是通过管道将包含命令的文件cat到程序中,然后使用某种shell魔法,当它到达文件的EOF时,让它从文件切换到STDIN 注意:我已经考虑过使用带“-”的cat来表示STDIN。不幸的是(我以前不知道),管道命令在启动第二个程序之前等待第一个程序的输

我有一个程序(我没有写),它不是用来从文件中读入命令的。在STDIN上输入命令是相当乏味的,因此我希望能够通过将命令写入文件以供重用来实现自动化。问题是,如果程序点击EOF,它会无限循环,试图读入下一个命令,并在屏幕上留下源源不断的菜单选项

我想做的是通过管道将包含命令的文件cat到程序中,然后使用某种shell魔法,当它到达文件的EOF时,让它从文件切换到STDIN

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

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

编辑:


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

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

我认为
expect
可以做到这一点。

我会这样做

(cat your_file_with_commands; cat) | sh your_script

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

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


这是一个好主意,但不幸的是,我不能在文件完成后继续键入命令。(我应该在我的帖子中更清楚地说明这一点——我会编辑它。)如果你键入'tail-f commandfile-'尝试在阅读文件后将其切换到STDIN,它会抱怨:警告:无限期地遵循标准输入是无效的,不过感谢你的想法!您是否尝试过使用
echo something>>commandfile
向文件追加行<代码>尾部-f也应该跟踪这些添加。哈!我只是想试试。如果有效的话,我会再次发表评论。(该计划需要一段时间才能开始。)成功!我有一个窗口运行'tail-n$NUM_LINES_IN_FILE-f$FILENAME |$PROGRAM_NAME',另一个窗口运行'cat>$FILENAME',因此我可以连续输入命令。像冠军一样工作!打得好,米切尔!你能做到吗?我不知道你能把命令分组。这是我今天的新鲜事。这使我不必使用第二个窗口——非常感谢,Idelic!对于感兴趣的人,您可以使用以下方法在包含命令的文件上构建:(cat your_file_with_commands;tee-a your_file_with_commands)| sh your_script,除了通过管道将每个命令传递给脚本之外,它还会将每个命令附加到文件中。
cat your_file_with_commands - | sh your_script