bash 预期脚本错误缺少右括号

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27413534/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-18 11:59:40  来源:igfitidea点击:

Expect script error missing close-brackets

bashshellnetworkingexpectsystem-administration

提问by Aaron88

Hi here is my expect script:

嗨,这是我的期望脚本:

#!/usr/local/bin/expect -f
set force_conservative 0  ;# set to 1 to force conservative mode even if
                          ;# script wasn't run conservatively originally
if {$force_conservative} {
        set send_slow {1 .1}
        proc send {ignore arg} {
                sleep .1
                exp_send -s -- $arg
        }
}

set timeout -1
spawn $env(SHELL)
match_max 100000
send -- "ssh IP_addr\r"
expect -exact "password: "
send -- "something\r"
expect -exact "\r"
#expect -exact "Entering server port, ..... type ^z for port menu."
send -- "\r"
expect -exact "login: "
send -- "admin\r"
expect -exact "password: "
send -- "something\r"
expect -exact "something > "
send -- "reboot\r"
expect -exact "REBOOT THE SYSTEM? (y or n): "
send -- "y\r"
expect -exact "SYSTEM REBOOTING!\r"
set no 20
for {set i 1} {$i < $no} {incr i 1} { 
    send -- "^[-"   
}
expect -exact "\/----Enter Password----\"
expec eof

I want to send escape and hyphen character multiple times until I receive "/----Enter Password-----\ prompt. But I'm receiving following error at this line:

我想多次发送转义和连字符,直到我收到“/----输入密码-----\”提示。但我在这一行收到以下错误:

missing close-bracket
            while executing
        "'send -- "^[-"'
        "
            ("for" body line 2)
            invoked from within
        "for {set i 1} {$i < $no} {incr i 1} {
                'send -- "^[-"'
        }"
            (file "script_auto.exp" line 31)

I'm newbie to expect. Kindly let me know what does that error mean and how can I resolve it.

我是新手期待。请让我知道该错误是什么意思,我该如何解决。

回答by glenn Hymanman

expect is an extension of the Tcl language. In Tcl, square brackets are used for command substitution, exactly the way backticks are used in posix shells.

expect 是 Tcl 语言的扩展。在 Tcl 中,方括号用于命令替换,这与 posix shell 中使用反引号的方式完全相同。

Change

改变

send -- "^[-"   

to

send -- {^[-}   

The curly braces prevent command substitution, so the open bracket is seen as just a plain character.

花括号防止命令替换,因此左括号被视为只是一个普通字符。