Подтвердить что ты не робот

Как передать аргумент в ожидании через командную строку в оболочке 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 "$ "

но он не работает. Пожалуйста, помогите мне разобраться.

Спасибо

4b9b3361

Ответ 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, покажет вам, что происходит.