2013-06-12 10 views

Odpowiedz

48

Jeśli chcesz przeczytać z argumentów, można to osiągnąć jedynie poprzez

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

i wydrukować go

send_user "$username $password" 

Że skrypt wypisze

$ ./test.exp user1 pass1 
user1 pass1 

Y ou można użyć trybu debugowania

$ ./test.exp -d user1 pass1 
+5

Chociaż to działa, należy zachować ostrożność stosując ją jako proces pojawi się z argumentami, nazwę użytkownika i hasło, gdy robi coś takiego jak „ps aux” – joeb

+0

możemy pętli listy argumentów i umieścić je w tablicy? – Vivek

5

Lepszym sposobem może być to:

lassign $argv arg1 arg2 arg3 

Jednak metoda powinna działać jak dobrze. Sprawdź, czy pobrano arg1. Na przykład z send_user "arg1: $arg1\n".

-1

uwaga, czasami argv 0 to nazwa skryptu, do którego dzwonisz. więc jeśli uruchomić go w ten sposób, argv 0 nie działa,
dla mnie biegnę "> spodziewać script.exp hasło"

sprawia, że ​​argv 1 = hasło argv 0 = script.exp

0

args ze spacjami są w porządku, zakładając arg chcesz to pierwsza po nazwie skryptu ($0 jest nazwa skryptu, $1 jest pierwszym Arg, itd.)

Używaj "$ARG"nIE$ARG jak to wil NOT zawierają białe znaki, ale dzielą je na poszczególne argumenty. Czy to w skrypcie bash:

#!/bin/bash 

ARG="$1" 
echo WORD FROM BASH IS: "$ARG" #test for debugging 

expect -d exp.expect "$ARG" 

exit 0 

Ponadto, jako pierwszych państw odpowiedź, użyj trybu debugowania (flagę -d) Będzie wyjście twoje argv zmienne jak expect widzi je, powinien pokazać, co się dzieje .

1
#!/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 
Powiązane problemy