我想使用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
命令被改变的方式解决,但仍然无法回答问题。所以请记住这一点。
答案 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的子进程。