bash - 期望脚本发送重新启动从未被机器处理
问题描述
我编写了一个期望脚本,它将 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"
这里没有错误消息,它什么也不做。它应该发出重启命令。
解决方案
你似乎真的错过了期望的“期望”部分——你真的应该试着写成:
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
到代码的顶部。
推荐阅读
- list - 为复选框或文本类别行制作此动画
- ffmpeg - 使用ffmpeg将十进制格式命名文件组合成mp4
- php - 无法打开流:没有这样的文件或目录,但目录存在。在本地主机上工作,但不在实时站点上
- swiftui - 使用 iOS 14 @main 时托管控制器
- c# - LINQ - 将选择总和转换为分组总和
- python - PyGame:如何对列表中的图像使用“get_rect”函数
- kubernetes - Pulumi pod 未能完全初始化或在 gcp 中生效
- javascript - Javscript vanila 点击事件适用于计算机,但不适用于手机
- html - 如何垂直居中
- html - 如何 - 并排对齐图像