以非交互方式向交互式程序传递参数

我有一个 bash 脚本,它使用 read命令以交互方式向命令读取参数,例如 yes/no 选项。有没有办法在非交互式脚本中调用此脚本,并将默认选项值作为参数传递?

这不仅仅是我必须传递给交互式脚本的一个选项。

140085 次浏览

你可以把数据放进一个文件,然后像这样重定向:

$ 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)。 它基本上模拟了一个用户,你可以编写一个脚本如何对特定的程序输出和相关的东西做出反应。

这也适用于像 ssh这样禁止将密码通过管道传输到它的情况。

只是想添加一个方式。找到它在别处,而且是相当简单的。 假设我想在命令行中为命令“ execute _ command”的所有提示传递 yes,那么我只需向它传递 yes。

yes | execute_command

这将使用 yes 作为所有“是”/“否”提示符的答案。

还可以使用 printf 将输入通过管道传递到脚本。

var=val
printf "yes\nno\nmaybe\n$var\n" | ./your_script.sh