有没有可能使用Bash脚本自动处理通常由默认操作呈现给用户的提示?目前,我正在使用Bash脚本调用内部工具来向用户显示提示(提示Y / N)以完成操作,但我编写的脚本需要完全“无人干预”,因此我需要一种方法将 Y | N 发送到提示以允许程序继续执行。这可行吗?
有没有可能使用Bash脚本自动处理通常由默认操作呈现给用户的提示?目前,我正在使用Bash脚本调用内部工具来向用户显示提示(提示Y / N)以完成操作,但我编写的脚本需要完全“无人干预”,因此我需要一种方法将 Y | N 发送到提示以允许程序继续执行。这可行吗?
echo "Y Y N N Y N Y Y N" | ./your_script
这允许您向脚本传递任何“Y”或“N”序列。
printf 'y\ny\ny\n' | ./your_script
,这样你就可以手动插入每个预期条目的换行符。 - Majidprintf '%s\n' Y Y N N Y N Y Y N
会在每个项目之间添加换行符,而无需一个大的格式字符串。 - Charles DuffyExpect
能够应对密码提示吗?例如,git pull
需要我输入用户名和密码。密码不会显示在屏幕上,而是隐藏的。Expect
能够处理这个问题吗? - Xbox Oneexpect
做过了),但如果你在StackOverflow或Unix.SE上搜索这个问题,我相信它已经被问过了。而且我很确定你可以很容易地找到它的例子。在评论中提问通常不会得到好的答案。 - iconoclast如果你只有 Y 可以发送:
$> yes Y |./your_script
如果你只有 N 可以发送:
$> yes N |./your_script
我发现发送输入的最佳方式是使用cat和一个文本文件,将需要输入的内容传递给它。
cat "input.txt" | ./Script.sh
cat
命令才是无用的。另一种选择是否更高效是另一回事,但严格来说,不能说cat
没有价值。这就是为什么尽管有很多抱怨,仍然有很多人使用它的原因。 - iconoclastphp 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'。有一个特殊的内置工具可以实现这个功能 - 'yes'。
要用相同的答案回答所有问题,您可以运行以下命令:
yes [answer] |./your_script
或者你可以将它放在你的脚本中,对每个问题都有特定的答案。
$'hello\ngoodbye\nso long'
会无限循环遍历这三个字符串。($'...'
这种 "C 字符串" 表示法是 Bash 特有的;但在任何 Bourne 兼容的 shell 中,您都可以使用常规单引号和字面换行符。) - tripleeeyes $(date|md5sum) | security add-generic-password -s facebook -a xx.yy -w
可以在不需要输入密码的情况下将密码添加到钥匙串中。 - DawnSong
yes
命令进行这个操作的示例:http://unix.stackexchange.com/questions/47344/the-yes-command#comment65866_47344 - yurisich