我正在运行一个脚本(我不能编辑它),有三个是/否的问题。 我怎样才能自动回答这些问题? 我需要回答是的,是的,不是(依次)。
尝试这个:
echo -e "yes\nyes\nno" | /path/to/your/script
一些脚本可以从标准输入中回复。 其中一种方法是:
$ printf "%s\n" yes yes no | ./foo.sh yes yes no
这很容易阅读,但依赖于脚本内部如何处理标准输入,以及如果不能编辑有时会成为问题的目标脚本。
虽然有时您可以使用标准输入,但交互式提示通常可以通过Expect等工具更好地处理。 例如,给定一个脚本foo.sh ,你可以写foo.exp来自动化它。
注意:您还可以使用autoexpect从交互式会话创建脚本,然后可以根据需要进行编辑。 我强烈推荐这个新的预期人。
这是您可能想要自动化的脚本。
#!/usr/bin/env bash for question in Foo Bar Baz; do read -p "${question}? " replies=("${replies[@]}" "$REPLY") done echo "${replies[@]}"
这里是一个简单的Expect脚本来自动化上面的Bash脚本。 期望的循环,分支和正则表达式可以提供比这个简单的示例显示更多的灵活性,但它确实显示了一个最小的Expect脚本是多么容易!
#!/usr/bin/env expect spawn -noecho /tmp/foo.sh expect "Foo? " { send -- "1\r" } expect "Bar? " { send -- "2\r" } expect "Baz? " { send -- "3\r" } interact
当您运行Expect脚本时,这就是您的交互式会话的外观。 它会产生你的Bash脚本,并按照不同的提示进行响应。
$ /tmp/foo.exp Foo? 1 Bar? 2 Baz? 3 1 2 3