web-dev-qa-db-fra.com

Comment passer un argument dans expect via la ligne de commande dans un script shell

Je passe l'argument dans expect par la ligne de commande du script shell

J'ai essayé ça

#!/usr/bin/expect -f

set arg1 [lindex $argv 0]

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

mais ça ne marche pas. S'il vous plaît aidez-moi à comprendre.

Merci

52
lk121

Si vous voulez lire des arguments, vous pouvez y arriver simplement en

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

Et l'imprimer

send_user "$username $password"

Ce script va imprimer

$ ./test.exp user1 pass1
user1 pass1

Vous pouvez utiliser le mode débogage

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

Une meilleure façon pourrait être ceci:

lassign $argv arg1 arg2 arg3

Cependant, votre méthode devrait également fonctionner. Regarde ça arg1 est récupéré. Par exemple, avec 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

J'aime la réponse fournie avec ce guide . Il crée un processus d’argument d’analyse.

#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)"

Ce qui précède n’est qu’un extrait. Il est important de lire l'intégralité du guide et d'ajouter des contrôles d'argument utilisateur suffisants.

1
Duffmannen