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

41
demandé sur jpaugh 2013-06-12 11:14:03

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
61
répondu bartimar 2013-06-12 08:15:45

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".

6
répondu spbnick 2013-06-12 07:59:53
#!/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
1
répondu user128364 2017-12-26 22:16:38

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

-1
répondu Sid Dakota 2016-11-30 02:28:19

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.

-2
répondu eulerworks 2017-05-02 03:06:12