2017-01-22 3 views
0

Arbeits ich 192.168.119.128-192.168.119.129 automatische anmelden möchten und einige Befehle ausführen, so schreibe ich ein Skript erwarten.Linux erwarten Befehl ohne interact Richtlinie nicht

a.sh

#!/usr/bin/expect -f 

set timeout 5 
spawn ssh [email protected] 
expect "password" {send "123456\r"} 
expect "]#" {send "touch /tmp/a.txt\r"} 
#interact 

Die Ausgabe lautet:

[email protected]:~/Work$ ./a.sh 
spawn ssh [email protected] 
[email protected]'s password: 
Last login: Sun Jan 22 17:36:21 2017 from 192.168.119.128 
[[email protected] ~]# [email protected]:~/Work$ 

ich successfuly anmelden, aber es scheint touch /tmp/a.txt Befehl ausgeführt wird nicht.

Wenn ich die letzte Zeile #interact von a.sh auskommentieren, funktioniert es, und die Datei a.txt wird erstellt. Hier

#!/usr/bin/expect -f 

set timeout 5 
spawn ssh [email protected] 
expect "password" {send "123456\r"} 
expect "]#" {send "touch /tmp/a.txt\r"} 
interact 

ist die Ausgabe:

[email protected]:~/Work$ ./a.sh 
spawn ssh [email protected] 
[email protected]'s password: 
Last login: Sun Jan 22 17:41:23 2017 from 192.168.119.128 
[[email protected] ~]# touch /tmp/a.txt 
[[email protected] ~]# 

Warum ohne die interact Richtlinie das Skript Arbeit nicht richtig? Vielen Dank.

Antwort

1

Ohne interact wird das Expect-Skript nach dem letzten Befehl expect "]#" beendet und der erzeugte Prozess wird beendet. Es ist genau wie Sie die SSH-Client-Anwendung (wie PuTTY) Fenster schließen, wenn der Schal noch am Leben läuft.

Die interact ist ein Langlaufbefehl, der für wartet der erzeugte Prozess zu beenden.

+0

Ja, ich gelöst, zuletzt "#interact" zu "erwarten "] #"{} schließen" arbeiten. –