'重启'在“cp'”之后命令无法正常工作命令

时间:2018-05-08 13:27:03

标签: linux cp reboot mv

我编译了在ARM上作为二进制文件运行的C代码。 ARM使用使用buildroot生成的旧Image从SD卡引导Linux。在C代码中,我调用一个shell脚本,将我要启动的新Image从SD卡上的子目录移动到SD卡的顶层(覆盖旧的Image) ,然后使用备份Image.bak再次恢复子目录中的Image,以防我再次运行脚本:

#!/bin/sh
mv /sd/newImage/Image /sd/
mv /sd/newImage/Image.bak /sd/newImage/Image
reboot

在这种情况下,重新启动正常工作(Putty断开连接 - >电路板上的LED我使用红色然后是绿色 - >我可以通过Putty重新连接),尽管第二个mv命令不会 - 它会移除Image.bak但不会创建Image - 但这不是此帖的目的,实际上。

当我尝试修改脚本以便Image.bak使用Image命令实际恢复cp时,重启无法正常工作。

#!/bin/sh
mv /sd/newImage/Image /sd/
cp /sd/newImage/Image.bak /sd/newImage/Image
reboot

我正在使用断开连接的Putty终端会发生什么,但是当发信号通知重启时,电路板上的红色LED指示灯保持绿色状态,通过Putty重新建立连接的唯一方法是手动重启电路板通过电源开关。因此,当我在shell脚本中调用cp命令时,似乎发生了一些奇怪的事情。我已经尝试卸下SD卡,认为可能存在同步问题,但这也没有用。

我以root身份登录,权限不应该是任何问题。

1 个答案:

答案 0 :(得分:2)

首先,这实际上是一个系统问题,而不是一个编程问题,所以它应该可能在另一个堆栈中。

其次,这很可能是图像实际上是文件系统中其他地方的符号链接的结果。使用cp时,它将替换链接指向的内容。当您使用mv时,它会将此文件放入符号链接的位置,但会将原始文件保留在其实际位置。

要验证这一点,只需使用ls -l /sd并记下Image的文件类型(属性中的第一个字符)。