Comment passer l'argument dans expect grâce à la ligne de commande dans le script shell
je passe l'argument dans expect
via la ligne de commande en script shell
j'ai essayé
#!/usr/bin/expect -f
set arg1 [lindex $argv 0]
spawn lockdis -p
expect "password:" {send "$arg1r"}
expect "password:" {send "$arg1r"}
expect "$ "
mais ça ne fonctionne pas. Merci de m'aider à le comprendre.
Merci
5 réponses
si vous voulez lire à partir d'arguments, vous pouvez y parvenir simplement en
set username [lindex $argv 0];
set password [lindex $argv 1];
Et l'imprimer
send_user "$username $password"
ce script affichera
$ ./test.exp user1 pass1
user1 pass1
vous pouvez utiliser le mode de débogage
$ ./test.exp -d user1 pass1
une meilleure façon pourrait être celle-ci:
lassign $argv arg1 arg2 arg3
Cependant, votre méthode devrait fonctionner aussi bien. Vérifiez que arg1
est extraite. Par exemple,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
remarque, parfois argv 0 est le nom du script que vous appelez. donc, si vous exécutez cette façon, argv 0 ne fonctionne pas,
pour moi, je l'exécuter
">expect script.exp mot de passe"
Cela fait argv 1 = Mot de passe argv 0 = script.exp
Args avec des espaces sont très bien, en supposant que l'arg que vous voulez est le premier après le nom du script ( est le nom du script,
est le premier arg, etc.)
assurez-vous d'utiliser "$ARG"
$ARG
comme il se doit incluez les espaces blancs, mais divisez-les en args individuels. Dans votre bash
script:
#!/bin/bash
ARG=""
echo WORD FROM BASH IS: "$ARG" #test for debugging
expect -d exp.expect "$ARG"
exit 0
aussi, comme la première réponse l'indique, utilisez le mode de débogage, (le -d
drapeau)
Il sera à la sortie de votre argv
variables comme expect
les voit, devrait vous montrer ce qui se passe.