【发布时间】:2016-12-21 06:50:18
【问题描述】:
我正在尝试使用 expect 实用程序来自动执行需要在脚本执行期间输入密码的任务。
expect -c "set timeout 120;
spawn /bin/bash /home/user/script.sh;
# Expect 1 - not expected always
expect \"Are you sure you want to continue connecting (yes/no)?\"; send "yes\r";
# Expect 2 - not expected always
expect \"Please type 'yes' or 'no':\"; send \"yes\r\";
# Expect 3 - this is required always to input the password
expect \"user@xyz.com's password:\"; send \"password\r\"; expect eof"
从上面的脚本中,期望 1 和 2 条件并不总是需要。只有在针对新服务器执行脚本时才需要它。一旦将主机的身份添加到已知主机,脚本将不会提示前 2 个期望条件。在大多数情况下,Expect 3 是唯一满足的条件。
在主机身份已经存在的系统中,expect 脚本执行第一个条件并一直保持到超时,并且不会达到期望 3。我不知道如何实现这一点,但是否有如果未满足提示,则希望中断。
【问题讨论】:
-
expect 不是 bash 的一部分,它不是特定于 bash,它不随 bash 一起提供,它甚至不使用 bash 底层(它基于的语言是 TCL)。您可以在根本没有安装 bash 的情况下运行期望脚本。 bash 标记在特定于预期的问题中没有位置。
-
谢谢,expect 命令本身并不是脚本中的 bash。我希望执行的 script.sh 是一个 bash 脚本,但这就是我调用 bash 可执行文件的原因
标签: expect