linux - programacion - scripts bash ejemplos
Cómo pasar el argumento en espera a través de la línea de comandos en el script de shell (5)
Estoy pasando argumento en expect
través de la línea de comandos en el script de shell
Intenté esto
#!/usr/bin/expect -f
set arg1 [lindex $argv 0]
spawn lockdis -p
expect "password:" {send "$arg1/r"}
expect "password:" {send "$arg1/r"}
expect "$ "
pero no está funcionando. Por favor, ayúdame a resolverlo.
Gracias
Args con espacios están bien, suponiendo que el argumento que desea es el primero después del nombre del script ( $0
es el nombre del script, $1
es el primer arg, etc.)
Asegúrese de utilizar "$ARG"
NOT $ARG
ya que NO incluirá el espacio en blanco, sino que los dividirá en args individuales. Haz esto en tu script bash
:
#!/bin/bash
ARG="$1"
echo WORD FROM BASH IS: "$ARG" #test for debugging
expect -d exp.expect "$ARG"
exit 0
Además, como dice la primera respuesta, use el modo de depuración (el indicador -d
). argv
sus variables de argv
como expect
verlas, y le mostrará lo que está sucediendo.
Si quieres leer de los argumentos, puedes lograr esto simplemente por
set username [lindex $argv 0];
set password [lindex $argv 1];
E imprímelo
send_user "$username $password"
Ese script se imprimirá
$ ./test.exp user1 pass1
user1 pass1
Puedes usar el modo Debug
$ ./test.exp -d user1 pass1
Una mejor manera podría ser esta:
lassign $argv arg1 arg2 arg3
Sin embargo, tu método debería funcionar también. Compruebe que se recupera arg1
. Por ejemplo, con send_user "arg1: $arg1/n"
.
tenga en cuenta que a veces argv 0 es el nombre del script que está llamando. entonces si lo ejecuta de esa manera, argv 0 no funciona,
para mí, ejecuto "> esperar contraseña de script.exp"
eso hace que argv 1 = contraseña argv 0 = script.exp
#!/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