0

我有多个带有 bash 和 ksh 提示的系统:bash 提示看起来像:[user1@wanserver bin]$ ksh 提示看起来像:$ 在某些系统上和 directory-name> 在某些系统上

使用期望我如何匹配这些 ksh 提示。我能够匹配 bash 提示,但不能匹配 ksh 提示。我在下面尝试了 ksh,但它不起作用。如何使这个工作?

#!/usr/bin/expect

set username [lindex $argv 0]
set password [lindex $argv 1]
set rt [lindex $argv 2]

spawn ssh -q -o StrictHostKeyChecking=no $username@$rt

expect {
timeout {
    puts "\n\nConnection timed out"
    exit 1
 }

 "*assword:" {
    send "$password\r"
  }
 }

 expect {
   "$ " {
    send "ls -l\r"
   }
}
4

2 回答 2

1

假设所有提示后都有一个空格,您可以使用正则表达式:

set prompt {[$>] $}
#...
expect -re $prompt
send "ls -l\r"

第一个美元符号是文字美元符号,因为它位于括号表达式中。第二个是正则表达式“行尾”锚。

于 2019-11-29T14:04:30.080 回答
0

代替:

 expect {
   "$ " {
   send "ls -l\r"
 }

利用:

 expect {
   {$ } {
   send "ls -l\r"
 }

有关详细信息,请参阅http://tcl-lang.org/man/tcl/TclCmd/Tcl.htm上的规则 4、6 和 8

于 2019-11-29T08:41:09.307 回答