我在 bash 脚本中有一个期望代码,就像这样
env input1=${INPUT1} input2=${INPUT2} expect << "EOS"
set timeout -1
spawn ./another_script.sh
expect {
"Input 1" { send -- "$env(input1)\r";exp_continue }
"Input 2" { send -- "$env(input2)\r";exp_continue }
eof
}
EOS
在
another_script.sh
的执行过程中,我被提示输入 sudo 密码,但我不能,因为我还在期待中。我该怎么做才能输入 sudo 密码并让脚本在此之后继续运行?
我不想在脚本中保存密码然后将其传递给expect,但我希望能够输入它。
最佳答案
Donal Fellows 的答案是正确的方法,但为了完整起见,这里是您正在尝试的 interact
解决方案。要使用的命令是
expect {
"Input 1" { send -- "$env(input1)\r"; exp_continue }
"Input 2" { send -- "$env(input2)\r"; exp_continue }
"password for" { stty -echo
interact -u tty_spawn_id -o "\r" return
stty echo
exp_continue }
eof
}
您遇到的问题是您正在使用 stdin 上的脚本运行 expect,因此除非您使用
-u tty_spawn_id
使其与 /dev/tty
和用户一起使用,否则交互会遇到问题。您需要在此 tty 上显式设置回显开/关,因为 sudo 只会在生成的命令和期望之间的 pty 上完成它。关于bash - 在expect脚本中输入sudo密码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55680003/