![期望脚本支持两个预期字符](https://linux22.com/image/594991/%E6%9C%9F%E6%9C%9B%E8%84%9A%E6%9C%AC%E6%94%AF%E6%8C%81%E4%B8%A4%E4%B8%AA%E9%A2%84%E6%9C%9F%E5%AD%97%E7%AC%A6.png)
我想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 了,所以如果语法错误的话很抱歉!