2016-05-13 9 views
0

Im Ausführen der Remote-Skript und Überprüfen der Rückkehr Status des Skripts, aber wenn ich in der folgenden Weise die Rückgabe des Status des Kennworts, aber nicht den Status des aufgerufenen Skripts.Wie kann ich Erhalten Sie den Rückkehrstatus des aufgerufenen Skripts. Bitte helfen Sie im Voraus.Holen Sie sich das Ergebnis der Remote-Skript in 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 

Antwort

1

Sie automatisieren ssh bash remote_script, so dass Sie gehen, um nicht einen Shell-Prompt zu erhalten, wo Sie können echo $? - ssh Ihr Skript gestartet und dann beenden.

Was Sie tun müssen, ist den Exit-Status des erzeugten Prozesses (ssh soll mit dem Exit-Status des Remote-Befehls beendet werden). expect's wait Befehl bekommt Sie den Exit-Status (unter anderem)

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

Dank Glenn Jackman – marjun