it-swarm.com.de

Übergeben eines erwarteten Arguments über die Befehlszeile in einem Shell-Skript

Ich übergebe das Argument in expect über die Befehlszeile im Shell-Skript

Ich habe es versucht

#!/usr/bin/expect -f

set arg1 [lindex $argv 0]

spawn lockdis -p
expect "password:" {send "$arg1\r"}
expect "password:" {send "$arg1\r"}
expect "$ "

aber es funktioniert nicht. Bitte helfen Sie mir, es herauszufinden.

Vielen Dank

52
lk121

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

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

Und drucke es aus

send_user "$username $password"

Das Skript wird gedruckt

$ ./test.exp user1 pass1
user1 pass1

Sie können den Debug-Modus verwenden

$ ./test.exp -d user1 pass1
76
bartimar

Ein besserer Weg könnte sein:

lassign $argv arg1 arg2 arg3

Ihre Methode sollte jedoch auch funktionieren. Prüfe das arg1 wird abgerufen. Zum Beispiel mit send_user "arg1: $arg1\n".

5
spbnick
#!/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
2
user128364

Ich mag die Antwort mit diese Anleitung . Es wird ein Analyseprozess für Argumente erstellt.

#process to parse command line arguments into OPTS array
proc parseargs {argc argv} {
    global OPTS
    foreach {key val} $argv {
        switch -exact -- $key {
            "-username"   { set OPTS(username)   $val }
            "-password"   { set OPTS(password)   $val }
        }
    }
}
parseargs $argc $argv
#print out parsed username and password arguements
puts -nonewline "username: $OPTS(username) password: $OPTS(password)"

Das obige ist nur ein Ausschnitt. Es ist wichtig, das Handbuch vollständig durchzulesen und ausreichende Benutzerargumentprüfungen hinzuzufügen.

1
Duffmannen