Как остановить выполнение команды из командной строки в оболочке?

Ты смешиваешь ожидание и бэш-код. Ваш скрипт в основном бэш-скрипт, так что... замените верхнюю строку на #!/bin/bash. Затем замените строки:

sudo passwd ${!tmp}
expect -exact "[sudo] password for $current_user: "
send "$pass\r"
expect -exact "New password: "
send "$password\r"

вызовом функции mychangepw на аргументы, которые ожидают потребности, т.е. текущий пользователь, sudo пароль, пользователь для изменения, и их пароль:

mychangepw $current_user "$pass" ${!tmp} "$password"

Добавьте функцию к началу скрипта и используйте ее, чтобы передавайте аргументы на ожидание, с ожидаемым скриптом на stdin до строки "!":

mychangepw(){
    expect -d - "$@" <<\!
    set current_user [lindex $argv 0]
    set sudopass [lindex $argv 1]
    set user [lindex $argv 2]
    set password [lindex $argv 3]
    spawn sudo passwd $user
    expect -exact "\[sudo\] password for $current_user: "
    send "$sudopass\r"
    expect -exact "New password: "
    send "$password\r"
!
}

Будьте осторожны со строкой, начинающейся с "!". Это должен быть первый и единственный символ строки, без отступов или дополнительные пробелы, комментарии и т.д.

1
11.01.2018, 10:44
0 ответов

Теги

Похожие вопросы