2016-05-13 181 views
0

我正在執行遠程腳本並檢查腳本的返回狀態,但是如果我按照以下方式執行,它將返回密碼的狀態而不是被調用腳本的狀態。如何才能獲取被調用腳本的返回狀態。請提前幫助感謝。在Expect中獲取遠程腳本的結果

#!/usr/bin/expect 
proc auto { } { 
global argv 
set timeout 120 
set ip XXXX.XXX.XX.XX 
set user name 
set password pass 
set ssh_opts {-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no} 
set script /path-to-script/test.sh 
spawn ssh {*}$ssh_opts [email protected]$ip bash $script {*}$argv 
expect "Password:" 
send "$password\r" 
send "echo $?\r" 
expect { 
    "0\r" { puts "Test passed."; } 
    timeout { puts "Test failed."; } 
} 
expect eof 
} 
auto {*}$argv 

回答

1

你自動ssh bash remote_script,所以你不會得到一個shell提示,你可以echo $? - SSH將啓動腳本,然後退出。

你需要做的是得到產生進程的退出狀態(ssh應該以遠程命令的退出狀態退出)。期望的wait命令讓你退出狀態(等信息)

spawn ssh {*}$ssh_opts [email protected]$ip bash $script {*}$argv 
expect { 
    "Password:" { send "$password\r"; exp_continue } 
    timeout  { puts "Test failed." } 
    eof 
} 

# ssh command is now finished 
exp_close 
set info [wait] 
# [lindex $info 0] is the PID of the ssh process 
# [lindex $info 1] is the spawn id 
# [lindex $info 2] is the success/failure indicator 
if {[lindex $info 2] == 0} { 
    puts "exit status = [lindex $info 3]" 
} else { 
    puts "error code = [lindex $info 3]" 
} 
+0

謝謝格倫傑克曼 – marjun