我正在研究一个小脚本,试图在系统缺失的情况下自动安装梨 - 基本上,采用安装过程的交互部分并使它们成为非交互式的,所以我需要做的就是执行脚本,它自己为我做。这是我第一次尝试使用expect,而且,这不是我的预期。
以下示例代码:
/usr/bin/expect <<EOD
set timeout 20
set number [lindex $argv 0]
set path [lindex $argv 1]
spawn php -q go-pear.phar
expect "1-11, 'all' or Enter to continue:"
send "$number\r"
interact
expect "Installation base ($prefix) [/usr/local] :"
send "$path\r"
interact
EOD
目前这还不太正常,因为它试图在第一个菜单中填写/ usr / local部分,如下所示:
1-11, 'all' or Enter to continue: invalid command name "/usr/local"
while executing
"/usr/local"
invoked from within
"expect "Installation base () [/usr/local] :""
有人能告诉我这里我缺少什么吗?另外,我想得到这个,所以我不必将其作为./script $ var0 $ var1运行,而是将其作为./script运行,其中包含所有内容并填写,但不知道该怎么做那。
提前感谢您提供的任何帮助。
答案 0 :(得分:3)
一个问题是字符串中的[...]
告诉期望执行命令。我认为你需要用\[...\]
来逃避它们。
希望这有点帮助=)
答案 1 :(得分:1)
我最终搞清楚了。如果其他人想要做类似的事情,这对我有用:
/usr/bin/expect <<EOF
set send_slow {1 .1}
set timeout -1
spawn php -q go-pear.phar
expect "1-11, 'all' or Enter to continue:"
sleep .1
send -s -- "1\r"
expect -exact "1\r"
sleep .1
send -s -- "/usr/local\r"
expect -exact "/usr/local\r"
expect "1-11, 'all' or Enter to continue:"
sleep .1
send -s -- "\r"
expect -exact "\r"
expect EOF