Как передать аргумент в ожидании через командную строку в оболочке script
Я передаю аргумент в expect
через командную строку в оболочке script
Я пробовал это
#!/usr/bin/expect -f
set arg1 [lindex $argv 0]
spawn lockdis -p
expect "password:" {send "$arg1\r"}
expect "password:" {send "$arg1\r"}
expect "$ "
но он не работает. Пожалуйста, помогите мне разобраться.
Спасибо
Ответы
Ответ 1
Если вы хотите прочитать из аргументов, вы можете достичь этого просто
set username [lindex $argv 0];
set password [lindex $argv 1];
И напечатайте его
send_user "$username $password"
Что script напечатает
$ ./test.exp user1 pass1
user1 pass1
Вы можете использовать режим отладки
$ ./test.exp -d user1 pass1
Ответ 2
Лучший способ может быть следующим:
lassign $argv arg1 arg2 arg3
Однако ваш метод также должен работать. Убедитесь, что извлечен arg1
. Например, с send_user "arg1: $arg1\n"
.
Ответ 3
#!/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
Ответ 4
Мне нравится ответ, предоставленный в этом руководстве. Это создает процесс анализа аргумента.
#process to parse command line arguments into OPTS array
proc parseargs {argc argv} {
global OPTS
foreach {key val} $argv {
switch -exact -- $key {
"-username" { set OPTS(username) $val }
"-password" { set OPTS(password) $val }
}
}
}
parseargs $argc $argv
#print out parsed username and password arguements
puts -nonewline "username: $OPTS(username) password: $OPTS(password)"
Выше просто фрагмент. Важно полностью прочитать руководство и добавить достаточные проверки пользовательских аргументов.
Ответ 5
note, иногда argv 0 - это имя вызываемого script. поэтому, если вы запускаете его таким образом, argv 0 не работает,
для меня я бегу
" > ожидать script.exp password"
что делает argv 1 = пароль
argv 0 = script.exp
Ответ 6
Арги с пробелами точны, если вы хотите, чтобы arg был первым после имени script ($0
is script name, $1
- первый arg и т.д.)
Убедитесь, что вы используете "$ARG"
НЕ $ARG
, так как wil NOT включают пробелы, но разбивают их на отдельные аргументы. Сделайте это в своем bash
script:
#!/bin/bash
ARG="$1"
echo WORD FROM BASH IS: "$ARG" #test for debugging
expect -d exp.expect "$ARG"
exit 0
Кроме того, как говорится в первом ответе, используйте режим отладки (флаг -d
),
Он выведет ваши переменные argv
, когда их увидит expect
, покажет вам, что происходит.