/ / expect błąd skryptu $ argv not found - shell, expect

oczekiwać błędu skryptu $ argv nie znaleziono - powłoka, oczekuj

Mam następujący skrypt powłoki (/ expect).

#!/bin/bash
expect -c "
set user [lindex $argv 0]
set password [lindex $argv 1]
set ipaddr [lindex $argv 2]
set timeout 10
spawn ssh $user@$ipaddr mkdir -p ~/Tested
expect "*?assword:*"
send -- "$passwordr"
interact
"

kiedy uruchamiam skrypt w następujący sposób

. test.sh abcd test 10.xx.xxx.xxx

Daje następujący błąd

can"t read "argv": no such variable
while executing
"lindex $argv 0"
invoked from within
"set user [lindex $argv 0]"

Czy ktoś wie, jaki jest błąd, jeśli zastąpię wiersze [lindex $ argv 0] rzeczywistą wartością, którą wykonuje skrypt.

Z góry dziękuję.

Odpowiedzi:

1 dla odpowiedzi № 1

The -c flaga w expect zapewnia sposób wykonywanie poleceń określonych w wierszu poleceń, a nie w skrypcie.

Ogólnie, -c Flaga is jest używana w wierszu poleceń służącym do wykonywania poleceń, zanim skrypt przejmie kontrolę.

Są one używane jak poniżej.

expect -c "set debug 1" myscript.exp

W pliku myscript.exp możesz sprawdzić wartość tej zmiennej:

if [info exists debug] {
puts "debugging mode: on"
}
else {
set debug 0
# imagine more commands here
if $debug {puts "value of x = $x"}
}

Po uruchomieniu skryptu sprawdza, czy debugowanie jest zdefiniowane przez ocenę info exists, a Komenda Tcl, która zwraca 1, jeśli zmiennajest zdefiniowane lub 0, jeśli nie jest. Jeśli jest zdefiniowane, skrypt może następnie przetestować go później, aby ustalić, czy powinien wydrukować informacje debugowania wewnątrz skryptu. Klauzula else ustawia debugowanie na 0, aby później było to proste if $debug można zastosować test.

Teraz przejdźmy do twojego pytania. Używasz zmiennej argv która jest listą argumentów wiersza poleceń przekazaną do jakiegoś skryptu i za pomocą -c flaga w użyciu, od tego czasu nie możesz z niej korzystać argv jest przeznaczony do użycia wewnątrz skryptu, a nie na zewnątrz.

Zamiast robić to w ten sposób, możesz umieścić swój kod w pliku skryptu i wywołać kod jak poniżej.

expect yourscript.exp username pwd ip_address

Jeśli nadal interesują Cię argumenty wiersza poleceń, możesz spróbować tego, co sugerował Fwilson w komentarzach.

expect yourscript.exp $1 $2 $3

Dzięki temu yourscript.exp pobierze argumenty ze skryptu powłoki.

Odniesienie : Exploring Expect