准备命令问题的答案


14

假设我想编写一个仅执行一个命令的shell脚本。但是此命令的设计不当。它不提供任何命令行选项。相反,它会问一些问题并等待用户输入。

有没有办法在脚本中准备此输入,因此问题会自动得到回答?

Answers:


16

如果命令不是很挑剔,则应使用以下命令:

command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF

这要求您事先知道确切的答案。


您可以使用以上答案来设计包装脚本。新脚本应侦听参数,并使用上述方法调用旧命令。
Walter A

也称为HERE文档,有关更多信息,您可以在此处
OldTimer 2015年

15

期望可以做到。从Expect 网站

Expect是用于自动化交互式应用程序(例如telnet,f​​tp,passwd,fsck,rlogin,tip等)的工具。Expect确实使这些事情变得微不足道。Expect对于测试这些相同的应用程序也很有用[...]”

它提供了很多帮助,例如autoexpect

再次从Expect网站上,

autoexpect监视您与其他程序的交互,并创建一个Expect脚本来重现您的交互。对于直线脚本,与手动编写脚本相比,自动预期可以节省大量时间。


谢谢您的回答。由于我的需求非常低,因此我的期望值太高了。比约恩斯的回答非常适合我的需求。但我建议您将答案留给其他需要更复杂解决方案的人。
tmuecksch 2015年

+1是因为我不知道存在自动期望,并且已经发现期望学习曲线太陡峭了,我无法打扰。我再看一看。
2015年

7

如果您的脚本期望一个提示或多个提示可以给出相同的答案,则有yes

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or `y'.

像这样使用它:

yes Me | give_a_hug.sh

3
常见但具有讽刺意味的用法是yes n,例如:yes n | mv -i * somewhere/
Sam Watkins
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.