有bash脚本回答交互式提示

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

这不是“自动完成”,这是自动化。 这些东西的一个共同的工具叫做期望 。

你也可以从yesinputpipe道input。

一个简单的

 echo "YYNNYNYYN" | ./your_script 

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

我发现发送input的最好方法是使用cat和一个文本文件来传递你需要的任何input。

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

如果你只有Y发送:

 $> yes Y |./your_script 

如果你只有N个发送:

 $> yes N |./yout_script 

在我的情况下,我需要回答一些问题,没有Y或N,但是有文本或空白。 我发现在我的情况下做到这一点的最好办法是创build一个shellcript文件。 在我的情况下,我把它叫做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对应方式来回答这些问题,但是在我做了这个=之后,我发现了这个问题。

运行脚本只需要在你想要的目录下运行terminal中的'sh autocomplete.sh'

总之,通过使用<< EOL&EOF 与Return Lines的组合,您可以根据需要回答每个提示问题。 每一个新行都是一个新的答案。

我的例子只是展示了如何使用“angular色”来完成评论,这样你就能记住每一步的内容。

注意这个方法的另外一个优点是你可以用更多的答案来回答Y或者N …其实你可以用空格回答!

希望这可以帮助别人。