我有一个 shell 脚本,它以无限循环的方式运行一个程序:
#!/bin/bash
while sudo /home/pi/MyCode; do :; done
echo Error with MyCode
我想设置 shell 脚本在启动时运行(我已经对其他 bash 脚本进行了此操作)。但是,我不希望脚本停止启动,或阻止我通过 ssh 登录。
我见过很多人因为启动时产生无限循环而不得不擦除并重新安装他们的 SD 卡。
我该如何防止这种情况发生?
我尝试过扩充代码:
#!/bin/bash
while sudo /home/pi/MyCode &; do :; done
echo Error with MyCode
在后台运行 MyCode,但我一直收到以下错误
之前意外的字符;
有没有办法在启动时运行此脚本而不停止启动?如果是这样,是否可以以某种方式完成,我仍然可以选择随时通过 SSH 停止脚本?
答案1
去除:
它会产生语法错误。
或者插入 sleep 1 或类似的东西来代替它,bash 可能会在空循环中崩溃while ... do
。如果你采用这种方法,你也会失去它,如果你把它留在里面,你将为循环的每次迭代创建一个新进程,一旦你的所有内存都被占用,你的 pi 就会停止运行。
还可以使用./myCode.sh
或exec myCode.sh
确保它确实运行了脚本。
如果您正在运行 Raspbian,我还建议您使用 upstart。这允许在启动期间以更可控的方式触发某些操作,例如仅在文件系统可用时运行。
也许你也可以发布你想要运行的代码,我可以检查是否没有其他错误。这对我的 bash-fu 训练很有好处!
答案2
将循环放入其自己的脚本中,在后台运行:
启动脚本:
#!/bin/bash
mainloop.sh &
echo Should get here
mainloop.sh
:
#!/bin/bash
while sudo /home/pi/MyCode; do :; done
可能有一种方法可以在一个脚本中完成此操作,但我对 Bash 不够熟悉,无法做到这一点。