生成后会出现第一个提示

时间:2014-03-21 06:07:41

标签: regex bash shell expect

我希望在expect之后制作一个以spawn "ssh user@server"首播的脚本。

上例:

我有5台服务器,但所有服务器都与初始promt不同,我无法修改:

[root@test home]#
root@server2:~$
User: root Server: server3 ~ !

你明白了。

这就是我的想法,但我无法弄清楚如何获得

    set timeout -1
    spawn "ssh root@server"

    expect "assword:"
    send "password\n"

#
    var=getpromt
#   
    expect "$var"
    send "stuff\n"

    expect eof

我如何才能将这些承诺提供给一个能够识别出该承诺的预期脚本?

2 个答案:

答案 0 :(得分:2)

我会保留一系列正则表达式:

array set prompt_re {
    test    {#\s*$}
    server2 {$\s*$}
    server3 {!\s*$}
}

spawn ssh $user@$host

expect assword:
send "$password\r"

expect -re $prompt_re($host)

或者,你可以把它们混合成一个正则表达式

expect -re {[#$!]\s*$}   ;# expect the prompt.

答案 1 :(得分:0)

试试这个(伪代码):

echo commands-to-be-executed-on-ssh | expect-script

&安培;你的expect-script看起来像是:

set timeout -1
spawn "ssh root@server"

expect "assword:"
send "password\n"
interact # <~~~~~~~~~~~ At this point, expect would pass the redirected/piped stdin to ssh process.

注意:我还没有测试过这个。所以语法错误道歉:)