有bash脚本回答交互提示

时间:2010-09-27 14:04:20

标签: linux bash automation command-prompt prompt

是否可以让bash脚本自动处理通常会通过默认操作呈现给用户的提示?目前我正在使用bash脚本来调用内部工具,该工具将向用户显示提示(提示Y / N)以完成操作,但是我写的脚本需要完全“不干涉”,所以我需要一种方法将Y|N发送到提示符以允许程序继续执行。这可能吗?

6 个答案:

答案 0 :(得分:137)

一个简单的

echo "Y Y N N Y N Y Y N" | ./your_script

这允许您将任何“Y”或“N”序列传递给您的脚本。

答案 1 :(得分:58)

这不是“自动完成”,这是自动化。这些事情的一个常用工具叫做Expect

您也可以从yes输入管道输入。

答案 2 :(得分:12)

我发现发送输入的最佳方法是使用cat和文本文件来传递你需要的任何输入。

cat "input.txt" | ./Script.sh

答案 3 :(得分:11)

如果你只有Y发送:

$> yes Y |./your_script

如果您只有N要发送:

$> yes N |./yout_script

答案 4 :(得分:7)

在我的情况下,我需要回答一些没有Y或N但有文字或空白的问题。我发现在我的情况下执行此操作的最佳方法是创建一个shellscript文件。在我的情况下,我称之为autocomplete.sh

我需要为一个学说模式导出器回答一些问题,所以我的文件看起来像这样。

- 这只是一个例子 -

php vendor/bin/mysql-workbench-schema-export mysqlworkbenchfile.mwb ./doctrine << EOF
`#Export to Doctrine Annotation Format`                                     1
`#Would you like to change the setup configuration before exporting`        y
`#Log to console`                                                           y
`#Log file`                                                                 testing.log
`#Filename [%entity%.%extension%]`
`#Indentation [4]`
`#Use tabs [no]`
`#Eol delimeter (win, unix) [win]`
`#Backup existing file [yes]`
`#Add generator info as comment [yes]`
`#Skip plural name checking [no]`
`#Use logged storage [no]`
`#Sort tables and views [yes]`
`#Export only table categorized []`
`#Enhance many to many detection [yes]`
`#Skip many to many tables [yes]`
`#Bundle namespace []`
`#Entity namespace []`
`#Repository namespace []`
`#Use automatic repository [yes]`
`#Skip column with relation [no]`
`#Related var name format [%name%%related%]`
`#Nullable attribute (auto, always) [auto]`
`#Generated value strategy (auto, identity, sequence, table, none) [auto]`
`#Default cascade (persist, remove, detach, merge, all, refresh, ) [no]`
`#Use annotation prefix [ORM\]`
`#Skip getter and setter [no]`
`#Generate entity serialization [yes]`
`#Generate extendable entity [no]`                                          y
`#Quote identifier strategy (auto, always, none) [auto]`
`#Extends class []`
`#Property typehint [no]`
EOF

我喜欢这个策略的是你可以评论你的答案是什么,并使用EOF一个空行就是那个(默认答案)。事实证明,这个导出工具有自己的JSON对应方式来回答这些问题,但我在做完之后想出了这个=)。

运行脚本只需在您想要的目录中,并在终端中运行'sh autocomplete.sh'

简而言之,使用&lt;&lt; EOL&amp; EOF 与退货行相结合您可以根据需要回答提示的每个问题。 每个新行都是一个新答案。

我的例子只是展示了如何使用`字符进行评论,以便你记住每一步是什么。

请注意,此方法的另一个优点是您可以使用更多只有Y或N来回答...实际上您可以使用空白回答!

希望这可以帮助别人。

答案 5 :(得分:2)

对此有一个特殊的内置实用程序-'yes'。

要用相同的答案回答所有问题,您可以运行

yes [answer] |./your_script

或者您可以将其放在脚本中,对每个问题有特定的答案