在Bash延迟后回应命令

时间:2014-03-23 15:21:23

标签: bash command echo

我想使用mcopy在.img文件中复制.bin文件。为此,我可以使用mcopy -i image.img bin.bin ::。使用它时,它会告诉我:Long file name "bin.bin" already exists. a)utorename A)utorename-all r)ename R)ename-all o)verwrite O)verwrite-all s)kip S)kip-all q)uit (aArRoOsSq):。由于此项目中稳定文件的大小和重要性,我总是想要放入O(小尺寸,没有重要性,只有你知道)。

所以我搜索了一下,发现这可以通过使用命令echo "O" | mcopy -i image.img bin.bin ::来完成。大。但是,mcopy有一点延迟,因此回声不会在正确的时间(太快)进入O。我尝试使用{ sleep 2; echo "O"; } | mcopy -i image.img bin.bin ::,这对任何事都没有帮助。

那么:如何使用echo在延迟后实际bash向命令发送短信?

(对于注释:在mcopy命令中添加-n既不起作用)

编辑:关于问题的目的似乎有些混乱,所以我会尽力澄清它。重点是,我有一个问题,我希望它解决了。这可以通过使用mcopy以另一种方式完成,如已经在评论中提出的那样,或者通过将echo延迟到命令(就像问题一样)。 即使我的问题以mcopy命令被改变的方式解决,但仍然无法回答问题。所以请记住这一点。

1 个答案:

答案 0 :(得分:0)

你问的是错误的问题,而且你已经知道你问的问题的答案了。

对于“如何在延迟后使用bash实际将文本回显到命令?”的问题,答案恰恰是:

 { sleep $DELAY; echo $TEXT; } | command

然而,这几乎不应该是必要的。它在给定的延迟之后向command的标准输入提供给定的文本,这可能导致命令在继续读取输入之前等待一段时间。但是(几乎)从来没有一种情况需要延迟数据直到命令已经等待它 - 如果命令是从标准输入读取

但是,在mtools的情况下,mcopy 从标准输入中读取冲突代码。相反,它直接从/dev/tty读取它,/dev/tty是与命令关联的终端。重定向标准输入(这是bash管道操作符所做的操作)对mcopy没有影响。因此,问题不在于您需要将数据延迟发送到/dev/tty的标准输入;问题是mcopy不使用标准输入,并且bash没有机制劫持mcopy以伪造用户输入。

所以另一个问题可能是“如何以编程方式告诉-D使用哪个冲突选项?”,但显然你也知道答案:使用mtools命令行选项(适用于所有相关的/dev/tty实用程序。)

最后,一个更复杂的问题:“是否有某种方法可以自动化一个坚持从expect读取输入的实用程序?”在这里,答案是肯定的,但技术并不像管道那么简单。最常见的方法是使用/dev/tty实用程序,它允许您生成expect是{t}可以与之通信的伪tty的子进程。