我在 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/

10-10 14:48
查看更多