fragen stichworte

Erwarten Sie das Skript + wie Sie den Fall im Expect-Skript ausführen

Das folgende erwartete Skriptziel besteht darin, den Hostnamen von einem Linux/Solaris-Rechner aus zu drucken und gemäß den Ergebnissen des Hostnamens wird davon ausgegangen, dass das Skript das Skript linux.ksh oder das Skript solaris.ksh

ausführt
expect_sun_script=`cat << EOF
set timeout -1
spawn   telnet 0 $IP_ADDRESS


expect login:           {send $LOGIN\r}
expect Password:        {send "PASS\r"}

expect -re {#|>}        {send "/bin/hostname\r"}

also - nachdem ich den Hostnamen bekommen habe, muss ich linux.ksh für den Hostnamen ausführen - machine1

oder wenn ich hostname - machine2 bekomme, muss ich das Script - solaris.ksh

ausführen

aber wie kann das Skript nach dem Hostnamen ausgeführt werden?

gemäß meinem Beispiel unten:

erwartet eigentlich warten auf machine1 - aber es könnte auch machine2 sein so ist es festgefahren ....

Mein Ziel ist es, linux.ksh oder solaris.ksh entsprechend dem relevanten Hostnamen

auszuführen

bitte Rat?

expect "machine1"            { send "/var/tmp/linux.ksh\r "  } 
expect "machine2"            { send "/var/tmp/solaris.ksh\r" }

.
.
.
.
.
.

antworten

Ich denke, du kannst etwas wie

machen  
expect "machine1" {send "/var/tmp/linux.ksh\\r" } \\
"machine2"  { send/var/tmp/solaris.ksh\\r" } \\
.
.
.

Nachdem Sie gesagt haben, dass es einfacher ist, uname zu verwenden, wird Linux bzw. SunOS zurückgegeben und sollte die Verwaltung des Skripts wesentlich erleichtern, wenn Hosts kommen und gehen.

expect -re {#|>}        {send "PATH=/bin:/usr/bin:$PATH uname\\r"}

expect "Linux" { send/var/tmp/linux.ksh\\r" } \\ 
expect SunOS { send/var/tmp/solaris.ksh\\r" }

Beachten Sie, dass der uname -Befehl in /bin für Linux und /usr/bin für Solaris ist. Daher legen wir PATH vor dem Befehl fest, um sicherzustellen, dass er auf beiden Systemen korrekt gefunden wird.