Shell脚本自毁和/或替换

Shell脚本自毁和/或替换,shell,Shell,我已经了解到,您可以通过在脚本中的任意位置添加rm script.sh安全地自毁脚本,系统将安全地将文件删除排队,直到脚本运行完毕,但我也读到,通过cp newscript.sh script.sh修改脚本本身是不安全的,因为在script.sh运行之前,缓冲区可能会在newscript.sh中开始读取。然而,以下是安全的吗 script.sh #!/bin/sh *some commands* replace.sh & exit 0 replace.sh(等待script.sh完成以

我已经了解到,您可以通过在脚本中的任意位置添加
rm script.sh
安全地自毁脚本,系统将安全地将文件删除排队,直到脚本运行完毕,但我也读到,通过
cp newscript.sh script.sh
修改脚本本身是不安全的,因为在
script.sh
运行之前,缓冲区可能会在
newscript.sh
中开始读取。然而,以下是安全的吗

script.sh

#!/bin/sh
*some commands*
replace.sh &
exit 0
replace.sh(等待
script.sh
完成以执行重放)

上下文


我正在使用
rc.local
在启动时运行一次性脚本,但是因为它只运行一次,所以我想用我所做的备份来还原
rc.local
。我试图避免弄乱
init.d
systemd
等。我已经测试了是否可以成功地使用
rc.local
调用的后台进程来测试
rc.local
是否仍在运行,并且我可以。

至少这里有一个竞争条件:如果再次重新启动script.sh,在循环完成之后,但在cp能够完成其工作之前,您就不走运了。这样做的时间窗口很小,但还是有可能的。你能锁定一个脚本来防止吗?实际上,没关系。rc.local只运行一次,我不认为我会在任何其他上下文中尝试这一点。
#!/bin/sh
while pidof -x script.sh
do
    sleep 1
done
cp newscript.sh script.sh
rm newscript.sh replace.sh
exit 0