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

时间:2013-01-18 04:45:23

标签: bash interactive non-interactive

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

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

6 个答案:

答案 0 :(得分:124)

很多方式

管道您的输入

echo "yes
no
maybe" | your_program

从文件重定向

your_program < answers.txt

使用here document(这可能非常易读)

your_program << ANSWERS
yes
no
maybe
ANSWERS

使用here string

your_program <<< $'yes\nno\nmaybe\n'

答案 1 :(得分:36)

对于更复杂的任务,有expecthttp://en.wikipedia.org/wiki/Expect)。 它基本上模拟用户,您可以编写脚本如何对特定程序输出和相关内容做出反应。

这也适用于像ssh那样禁止管道密码的情况。

答案 2 :(得分:12)

您可以将数据放入文件中并按照以下方式重定向:

$ cat file.sh
#!/bin/bash

read x
read y
echo $x
echo $y

脚本数据:

$ cat data.txt
2
3

执行脚本:

$ file.sh < data.txt
2
3

答案 3 :(得分:7)

只想添加一种方式。在其他地方找到它,非常简单。 假设我想在命令行的所有提示中为命令&#34; execute_command&#34;传递yes,然后我只是管道是的。

{{1}}

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

答案 4 :(得分:4)

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

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

答案 5 :(得分:0)

另外一个可以是

echo "something" | tee /path/to/file

tee命令将收到的输入打印到屏幕上,并同时将其保存到文件中。