2013-06-12 11 views

Antwort

48

Wenn Sie von Argumenten lesen möchten, können Sie dies einfach durch

set username [lindex $argv 0]; 
set password [lindex $argv 1]; 

erreichen Und es

send_user "$username $password" 

Das Skript

druckt drucken
$ ./test.exp user1 pass1 
user1 pass1 

Y

lassign $argv arg1 arg2 arg3 

jedoch Ihre Methode sollte auch funktionieren: ou können Debug-Modus

$ ./test.exp -d user1 pass1 
+5

Das funktioniert zwar, vorsichtig sein, sie als Ihren Prozess mit den Argumenten, Benutzername und Passwort wird angezeigt, wenn so etwas wie „ps aux“ – joeb

+0

können wir Schleife der Argumentliste zu tun und sie in Array setzen? – Vivek

5

Ein besserer Weg, dies könnte verwenden. Überprüfen Sie, ob arg1 abgerufen wurde. Zum Beispiel mit send_user "arg1: $arg1\n".

-1

Hinweis, manchmal ist argv 0 der Name des Skripts, das Sie aufrufen. so, wenn Sie es so laufen, argv 0 nicht funktioniert,
für mich Ich betreibe "> erwarten script.exp Passwort"

die argv 1 = Passwort argv 0 = script.exp

0
macht

Args mit Leerzeichen sind in Ordnung, vorausgesetzt, die arg Sie wollen, dass die erste nach dem Skriptnamen ist ($0 ist Name Skript, $1 ist zunächst arg, etc.)

Achten Sie darauf, "$ARG"NICHT$ARG wie es wil NICHT enthalten die Leerzeichen, aber zerlegen sie in einzelne Argumente. Tun Sie dies in Ihrem bash Skript:

#!/bin/bash 

ARG="$1" 
echo WORD FROM BASH IS: "$ARG" #test for debugging 

expect -d exp.expect "$ARG" 

exit 0 

Auch als die ersten Antwort Staaten, verwenden Sie den Debug-Modus (die -d Flag) Es wird ausgegeben Ihre argv Variablen wie expect sie sieht, sollten Sie zeigen, was los ist .

1
#!/usr/bin/expect 
set username [lindex $argv 0] 
set password [lindex $argv 1] 
log_file -a "/tmp/expect.log" 
set timeout 600 
spawn /anyscript.sh 
expect "username: " { send "$username\r" } 
expect "password: " { send "$password\r" } 
interact