我有一个脚本调用需要用户输入的应用程序,例如运行需要用户键入“Y”或“N”的应用程序 如何让shell脚本不要求用户输入,而是使用脚本中预定义变量的值?
在我的情况下,将有两个问题需要输入。
答案 0 :(得分:14)
您可以在stdin中输入您想要的任何文本,它与用户自己键入的文本相同。例如,要模拟输入“Y”,只需使用:
echo "Y" | myapp
或使用shell变量:
echo $ANSWER | myapp
还有一个名为“yes”的unix命令,可以为需要回答肯定的许多问题的应用输出连续的“y”流。
答案 1 :(得分:2)
对于更复杂情况的expect命令,你系统应该拥有它。我自己没有多用过,但我怀疑它是你在找什么。
$ man expect
答案 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脚本提供两个输入。然后......最后,我将脚本输出传递给日志文件进行存档并稍后查看。