首页 > 解决方案 > 期望脚本发送重新启动从未被机器处理

问题描述

我编写了一个期望脚本,它将 ssh 到一个树莓派,然后是一个定制的无线电设备。它将 md5 文件系统上的一个文件,然后将它与一个已知好的 md5 进行比较。然后它会发出一个命令来重启设备。问题是“发送”重启\r“”命令从未被无线电设备实际处理过。Expect 将其发送到正确的 expect_id,但什么也没发生。

我试过在脚本中移动这条线。有趣的是,当它被放置在 md5sum 调用之上时它会起作用。如果它是在 md5sum 调用之后的任何时间进行的,它将永远不会起作用。我试过使用 reboot 命令的完全限定路径,但没有。都不工作。请参阅下面的代码。自定义无线电设备正在运行旧版本的 linux 内核。我已经编写了 2 到 3 个在这些收音机上工作的其他脚本,并在整个脚本中定期重新启动它们。但是,对于这个特定的脚本,它根本不起作用(取决于代码行的位置)。

send "md5sum /root/BS5000/bs_config.xml\r\n"
sleep 3

send "/sbin/reboot\r"

这里没有错误消息,它什么也不做。它应该发出重启命令。

标签: bashsshtclexpect

解决方案


你似乎真的错过了期望的“期望”部分你真的应该试着写成:

spawn something
expect something
send something
expect something
...

所以:

send "md5sum /root/BS5000/bs_config.xml\r"
expect "*"
send "/sbin/reboot\r"
expect eof

如果您发现需要添加睡眠,那么您的预期模式不正确。在开发期望脚本时,将其与代码一起运行expect -d或添加exp_internal 1到代码的顶部。


推荐阅读