Answers:
根据以下手册页摘录中的期望:
“期望[[-opts] pat1 body1] ... [--opts] patn [bodyn]
等待直到其中一种模式与生成的过程的输出匹配,经过了指定的时间段或看到文件结束为止。如果最终主体为空,则可以省略。
来自最新的Expect_before命令的模式在任何其他模式之前被隐式使用。来自最新的Expect_after命令的模式将在其他任何模式之后隐式使用。
如果整个Expect语句的参数需要多于一行,则所有参数都可以“括起来”为一,以免用反斜杠终止每一行。在这种情况下,尽管有括号,仍会发生通常的Tcl替换。
如果模式是关键字eof,则在文件结束时执行相应的主体。如果模式是关键字超时,则在超时时执行相应的主体。如果不使用超时关键字,则在超时时执行隐式null操作。默认超时时间为10秒,但可以通过命令“ set timeout 30”将其设置为例如30。无限超时可以由值-1指定。如果模式是关键字default,则在超时或文件结束时执行相应的主体。
如果模式匹配,则执行相应的主体。Expect返回正文的结果(如果没有模式匹配,则返回空字符串)。如果有多个样式匹配,则首先出现的样式用于选择主体。...“
@DerfK已回答您的问题。我将重构您的脚本进行维护:
#!/bin/bash
export HOST="localhost"
export USER="myuname"
export PASS="mypassword"
script=<<'END_OF_SCRIPT'
set timeout 120
spawn ssh $env(USER)@$env(HOST)
expect "password:"
send "$env(PASS)\r"
expect "\$"
send "ls\r"
expect -re "$env(USER).*"
send "logout"
expect eof
END_OF_SCRIPT
VAR=$(expect -c "$script")
echo "==============="
echo "$VAR"