【发布时间】:2014-02-26 18:51:55
【问题描述】:
我想在 shell 脚本中实现自动更新程序。该脚本将首先更新自身,然后继续进行其余更新。
我相信在 Linux 中使用 exec 命令可以做到这一点,但在我看来这只是调用一个新脚本而不是停止旧脚本的终止。
你能告诉我为什么我在下面的场景中会出错。
exectestA.sh
#!/bin/sh
echo "a1"
sleep 1
cp exectestB.sh exectest.sh
echo "a2"
sleep 1
exec ./exectest.sh
echo "a3"
sleep 1
exectestB.sh
#!/bin/sh
echo "b1"
sleep 1
echo "b2"
sleep 1
cp exectestA.sh exectest.sh
echo "b3"
sleep 1
启动命令
cp exectestA.sh exectest.sh
./exectest.sh
在我的机器上输出
a1
a2
b1
b2
b3
./exectest.sh: 13: ./exectest.sh: ho: not found
如果 cp 不存在于 exectestB 中,则没有问题(它在 b3 之后终止)。
虽然我知道对于正常的更新过程来说 B 中的 cp 是不需要的,但我想了解为什么在 B 中包含 cp 会导致错误以避免将来可能出现的错误。
目前,在我看来,execA 在调用 execB 之后继续运行。是这样吗,如果是,我该如何避免?
注意:这似乎取决于 B 脚本的长度。如果我在 B 脚本的开头插入空行,结果会发生变化。
【问题讨论】:
-
避免更新当前的shell脚本......
标签: linux bash shell debian exec