146

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

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

4

5 回答 5

177

很多种方法

管道您的输入

echo "yes
no
maybe" | your_program

从文件重定向

your_program < answers.txt

使用此处的文档(这可能非常易读)

your_program << ANSWERS
yes
no
maybe
ANSWERS

使用此处的字符串

your_program <<< $'yes\nno\nmaybe\n'
于 2013-01-18T10:34:26.247 回答
51

对于更复杂的任务,有expect( http://en.wikipedia.org/wiki/Expect )。它基本上模拟了一个用户,你可以编写一个脚本来对特定的程序输出和相关的东西做出反应。

这也适用于ssh禁止向其输入密码的情况。

于 2013-01-18T10:56:39.773 回答
15

您可以将数据放在文件中并像这样重新定向它:

$ cat file.sh
#!/bin/bash

read x
read y
echo $x
echo $y

脚本数据:

$ cat data.txt
2
3

执行脚本:

$ file.sh < data.txt
2
3
于 2013-01-18T04:48:59.250 回答
10

只是想再添加一种方式。在别处找到的,很简单。假设我想在命令行中为命令“execute_command”的所有提示传递“是”,然后我只需将“是”传递给它。

yes | execute_command

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

于 2016-05-24T04:44:23.503 回答
8

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

var=val
printf "yes\nno\nmaybe\n$var\n" | ./your_script.sh
于 2020-06-10T01:21:02.427 回答