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
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
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"
.
#!/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
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.