我有一个 bash 脚本,它使用 read命令以交互方式向命令读取参数,例如 yes/no 选项。有没有办法在非交互式脚本中调用此脚本,并将默认选项值作为参数传递?
read
这不仅仅是我必须传递给交互式脚本的一个选项。
你可以把数据放进一个文件,然后像这样重定向:
$ cat file.sh #!/bin/bash read x read y echo $x echo $y
脚本的数据:
$ cat data.txt 2 3
执行剧本:
$ file.sh < data.txt 2 3
很多方面
管道输入
echo "yes no maybe" | your_program
从文件重定向
your_program < answers.txt
使用 这里的文件(这可以是非常可读的)
your_program << ANSWERS yes no maybe ANSWERS
使用 这里的绳子
your_program <<< $'yes\nno\nmaybe\n'
对于更复杂的任务有 expect(http://en.wikipedia.org/wiki/Expect)。 它基本上模拟了一个用户,你可以编写一个脚本如何对特定的程序输出和相关的东西做出反应。
expect
这也适用于像 ssh这样禁止将密码通过管道传输到它的情况。
ssh
只是想添加一个方式。找到它在别处,而且是相当简单的。 假设我想在命令行中为命令“ execute _ command”的所有提示传递 yes,那么我只需向它传递 yes。
yes | execute_command
这将使用 yes 作为所有“是”/“否”提示符的答案。
还可以使用 printf 将输入通过管道传递到脚本。
var=val printf "yes\nno\nmaybe\n$var\n" | ./your_script.sh