期望脚本支持两个预期字符

期望脚本支持两个预期字符

我想sshd restart通过 在 Linux 和 Solaris 机器上运行expect。(我的期望在我的 ksh 脚本中运行)

我创建了一个 expect 脚本。当 expect 看到提示符“#”时,它就会运行sshd restart

我也在 Solaris 上运行了同样的脚本,提示符为“>”。如何创建一个支持两个提示符的期望行?

在 Linux 上

expect #                {send "/etc/init.d/sshd restart\r"}

在 Solaris 上

expect >                {send "/etc/init.d/sshd restart\r"}

答案1

使用 glob 模式:expect {[#>]}

或正则表达式:expect -re {#|>}——正则表达式模式可以变得更加复杂。我建议您将提示匹配锚定到行尾。提示通常以空格结尾,因此您可以:

expect -re {[#>] ?$}

答案2

您可以通过检查 uname -s 的输出将其放入 if 语句中,或者通过检查以下输出:

猫/等/发布

cat /etc/redhat-release

cat /etc/lsb-release

并使用类似的东西:

if [[ $(uname -s) == "Linux" ]];then
   expect #  {send "/etc/init.d/sshd restart\r"}
else
   expect >  {send "/etc/init.d/sshd restart\r"}
fi

我已经有好几年没有使用过 ksh 了,所以如果语法错误的话很抱歉!

相关内容