Некоторые старые CLI-утилиты не берут пароль из stdin — только приглашением. expect скриптует диалог: ждёт паттерн в выводе и посылает ответ.
#!/usr/bin/expect
spawn passwd testuser
expect "New password:"
send "S3cur3Pass!\r"
expect "Retype new password:"
send "S3cur3Pass!\r"
expect eof
spawn запускает процесс, expect "паттерн" ждёт его в выводе (regex), send пишет в stdin, expect eof — дожидается завершения (без него скрипт выйдет раньше процесса).
autoexpect записывает сессию как script, сразу генерируя .exp-файл — писать с нуля не обязательно. expect — крайняя мера для legacy без non-interactive режима; где есть --batch/-y, лучше они.
#bash #automation #sysadmin
