从shell脚本中输入

时间:2008-12-30 07:45:18

标签: shell

我有一个脚本调用需要用户输入的应用程序,例如运行需要用户键入“Y”或“N”的应用程序 如何让shell脚本不要求用户输入,而是使用脚本中预定义变量的值?

在我的情况下,将有两个问题需要输入。

4 个答案:

答案 0 :(得分:14)

您可以在stdin中输入您想要的任何文本,它与用户自己键入的文本相同。例如,要模拟输入“Y”,只需使用:

echo "Y" | myapp

或使用shell变量:

echo $ANSWER | myapp

还有一个名为“yes”的unix命令,可以为需要回答肯定的许多问题的应用输出连续的“y”流。

答案 1 :(得分:2)

对于更复杂情况的expect命令,你系统应该拥有它。我自己没有多用过,但我怀疑它是你在找什么。

$ man expect

http://oreilly.com/catalog/expect/chapter/ch03.html

答案 2 :(得分:2)

如果应用程序从stdin读取(而不是从/ dev / tty,例如passwd程序执行),则多行输入是here-document的完美候选。

#!/bin/sh

the_app [app options here] <<EOF
Yes
No
Maybe
Do it with $SHELL
Quit
EOF

如您所见,here-documents甚至允许参数替换。如果您不想这样做,请使用<<'EOF'

答案 3 :(得分:0)

我更喜欢这种方式:如果你想要多个输入......你可以输入多个echo语句:

 { echo Y; Y; } | sh install.sh >> install.out

在上面的示例中...我正在向install.sh脚本提供两个输入。然后......最后,我将脚本输出传递给日志文件进行存档并稍后查看。