Стандартный способ обработки такого события состоит в том, чтобы отслеживать запрос пароля sudo, вводить его и затем продолжать.Но с долго работающим сценарием вы захотите кэшировать пароль в ожидаемом сценарии , чтобы вам не приходилось возвращаться к нему несколько раз в течение нескольких часов.В самом деле, для удобства использования вам, вероятно, нужно сначала запросить пароль, а не ждать, пока он понадобится базовой системе.
К счастью, ожидается, что в него включена поддержка stty, поэтому добавить его просто.
env input1=${INPUT1} input2=${INPUT2} expect << "EOS"
# Prompt for password, cribbed/converted from example on expect(1) manpage
stty -echo
send_tty "sudo password: "
expect_tty -re "(.*)\n"
send_tty "\n"
set password $expect_out(1,string)
stty echo
# Rest of the script, with clause for sending the password at the right time
set timeout -1
spawn ./another_script.sh
expect {
"Input 1" { send -- "$env(input1)\r"; exp_continue }
"Input 2" { send -- "$env(input2)\r"; exp_continue }
"assword: " { send -- "$password\r"; exp_continue }
eof
}
EOS