2013-06-12 13 views

risposta

48

Se si desidera leggere da argomenti, è possibile raggiungere questo obiettivo semplicemente

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

e stamparlo

send_user "$username $password" 

Questo script stamperà

$ ./test.exp user1 pass1 
user1 pass1 

Y ou possibile utilizzare la modalità di debug

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

Anche se questo funziona, fare attenzione ad usarlo come apparirà il vostro processo con gli argomenti, username e password, quando si fa qualcosa come "ps aux" – joeb

+0

possiamo ciclo la lista degli argomenti e metterli in ordine? – Vivek

5

Un modo migliore potrebbe essere questo:

lassign $argv arg1 arg2 arg3 

Tuttavia, il metodo dovrebbe funzionare pure. Verificare che sia stato recuperato arg1. Ad esempio, con send_user "arg1: $arg1\n".

-1

note, a volte argv 0 è il nome dello script che si sta chiamando. quindi se si esegue in questo modo, argv 0 non funziona,
per me corro "> si aspettano la password script.exp"

che rende argv 1 = Password argv 0 = script.exp

0

Args con spazi vanno bene, supponendo l'arg che si desidera è la prima dopo il nome dello script ($0 è il nome dello script, $1 è il primo arg, etc.)

assicurarsi di utilizzare "$ARG"NON$ARG come wil NON includono gli spazi bianchi, ma li suddividono in singoli argomenti. Fate questo nello script bash:

#!/bin/bash 

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

expect -d exp.expect "$ARG" 

exit 0 

Inoltre, come la prima risposta Stati, utilizzare la modalità di debug, (la bandiera -d) Sarà uscita tuoi argv variabili come expect li vede, dovrebbe mostrare ciò che sta succedendo .

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