Ron*_*Ron 9 linux bash automation prompt
我正在运行一个脚本(我无法编辑它),并且有三个是/否问题.我该如何自动回答这些问题?我需要回答是,是,否(按此顺序).
Cyr*_*rus 13
试试这个:
echo -e "yes\nyes\nno" | /path/to/your/script
Run Code Online (Sandbox Code Playgroud)
Tod*_*obs 10
某些脚本可以从标准输入中获取回复.其中一种方法是:
$ printf "%s\n" yes yes no | ./foo.sh
yes yes no
Run Code Online (Sandbox Code Playgroud)
这很简单,易于阅读,但依赖于脚本内部如何处理标准输入,以及您是否无法编辑有时可能存在问题的目标脚本.
虽然您有时可以使用标准输入,但通过Expect等工具可以更好地处理交互式提示.例如,给定一个脚本foo.sh,您可以编写foo.exp来自动化它.
注意:您还可以使用autoexpect从交互式会话创建脚本,然后可以根据需要进行编辑.我强烈推荐给Expect的新手.
这是您可能想要自动化的脚本.
#!/usr/bin/env bash
for question in Foo Bar Baz; do
read -p "${question}? "
replies=("${replies[@]}" "$REPLY")
done
echo "${replies[@]}"
Run Code Online (Sandbox Code Playgroud)
这是一个简单的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
Run Code Online (Sandbox Code Playgroud)
这是运行Expect脚本时交互式会话的外观.它将生成您的Bash脚本,并按照每个不同提示的指示进行响应.
$ /tmp/foo.exp
Foo? 1
Bar? 2
Baz? 3
1 2 3
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14826 次 |
最近记录: |