我有一个Bash脚本,使用read
命令交互式地读取命令参数,例如是/否选项。 有没有一种方法可以在非交互脚本中调用此脚本并传递默认的选项值作为参数?
我不仅需要传递一个选项到交互式脚本中。
我有一个Bash脚本,使用read
命令交互式地读取命令参数,例如是/否选项。 有没有一种方法可以在非交互脚本中调用此脚本并传递默认的选项值作为参数?
我不仅需要传递一个选项到交互式脚本中。
许多方法
可以将您的输入导入管道中
echo "yes
no
maybe" | your_program
从文件进行重定向
your_program < answers.txt
使用Here Documents(这样可以使内容更易读)
your_program << ANSWERS
yes
no
maybe
ANSWERS
使用here string。your_program <<< $'yes\nno\nmaybe\n'
read
命令来获取 stdin,但是你所描述的功能应该使用哪个函数实现呢? - flow2kecho -e
; 而是使用printf '%s\n' i 2 y y | your_command
。将所有输入放在一行上显然只传递了一行输入,即用所有文本回答第一个提示。 - tripleee对于更复杂的任务,可以使用expect
(http://en.wikipedia.org/wiki/Expect)。
它基本上模拟了一个用户,您可以编写脚本来响应特定程序输出和相关内容。
这在像ssh
这样禁止通过管道输入密码的情况下也适用。
你可以将数据放入一个文件中,然后像这样重新定向它:
$ cat file.sh
#!/bin/bash
read x
read y
echo $x
echo $y
脚本的数据:
$ cat data.txt
2
3
执行脚本:
$ file.sh < data.txt
2
3
只想再添加一种方法。在其他地方找到了它,而且非常简单。 假设我想要在命令行中为“execute_command”命令的所有提示都传递yes,那么我只需将yes导入即可。
yes | execute_command
这将使用“是”作为所有是/否提示的答案。
y
,而是任何您喜欢的字符串。例如,要传递 n
,只需编写
yes n | execute_command
- lupalby您还可以使用printf将输入管道传输到脚本中。
var=val
printf "yes\nno\nmaybe\n$var\n" | ./your_script.sh
wml
)中使用printf
可以正常工作,而其他技术都无法实现。 - Matthemattics