如何在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...

相關內容