如何在shell中编写expect

如何在shell中编写expect

这是我之前问题的延续:未找到生成命令

在参考了一些旧帖子后,我已经编写了这些命令,如果它是错误的,那么我如何运行 ssh 到远程服务器并运行一些命令?

答案1

一种可能性是:创建一个 Expect-syntax 文件,并通过 shell 脚本调用它:

 #!/bin/bash
 expect -f my-file.exp $1 # parameter 1 is the server name

在 my-file.exp 中,您只会有 Expect 命令:

spawn ssh "username@[lindex $argv 0]"  # param 1 : server name
                                # expect now reads the input and does what you tell it on certain patterns

expect { 
  "password:" { send "my-password\r"; send "do_this_command\r"; send "do_that_command\r"; exp_continue; }
  "done" { send_user "exiting"; }
}

此示例登录到发送明文密码的服务器,然后发送一些命令并继续。

如果它从输入中读取“完成”,则终止,否则它将在几秒钟后超时。

只要执行“exp_continue”,它就会停留在 Expect {} 循环内,匹配输入并执行适当的输出。

答案2

您还可以在 shell 脚本中使用expect shebang 并编写expect 脚本。

#!/usr/bin/expect -f 
spawn ssh localhost 
expect "password: " 
send "password\r" 
expect "{[#>$]}"         #expect several prompts, like #,$ and >
send -- "command.sh\r"
expect "result of command"
etc...

相关内容