我有一个bash脚本,它使用read
命令以交互方式读取命令的参数,例如是/否选项。有没有办法在非交互式脚本中调用此脚本,将默认选项值作为参数传递?
这不仅仅是我必须传递给交互式脚本的一个选项。
答案 0 :(得分:124)
很多方式
管道您的输入
echo "yes
no
maybe" | your_program
从文件重定向
your_program < answers.txt
使用here document(这可能非常易读)
your_program << ANSWERS
yes
no
maybe
ANSWERS
your_program <<< $'yes\nno\nmaybe\n'
答案 1 :(得分:36)
对于更复杂的任务,有expect
(http://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命令将收到的输入打印到屏幕上,并同时将其保存到文件中。