【发布时间】:2019-09-04 21:27:03
【问题描述】:
我在 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
interact工具的用途。 -
我找不到使用
interact的良好/有效示例。我尝试了类似"password for" { interact -o "\r" return ; exp_continue }的方法,但一个问题是我输入的内容是可见的,另一个问题是在我按下 ENTER 后,什么也没有发生,即。该脚本无法继续工作。 -
如果你想要这里的
expect专家,我可能想要一个tcl标签。 (expect是 TCL 语言的扩展,不是 bash 的一部分;因为您的问题与您如何开始期望 bash 无关,而与它启动后的行为方式无关,这不是特别是一个 bash 问题)。