自动化梨安装与期望

时间:2012-10-12 15:41:37

标签: bash scripting pear expect

我正在研究一个小脚本,试图在系统缺失的情况下自动安装梨 - 基本上,采用安装过程的交互部分并使它们成为非交互式的,所以我需要做的就是执行脚本,它自己为我做。这是我第一次尝试使用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运行,其中包含所有内容并填写,但不知道该怎么做那。

提前感谢您提供的任何帮助。

2 个答案:

答案 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