通常在运行shell脚本时,shell会在整个执行过程中保持脚本文件处于打开状态。在Unix系统上,这不是问题。
但是,Windows会阻止对以这种方式打开的文件进行修改。这意味着如果脚本在MSYS中运行,我需要在修改脚本之前终止shell。这很烦人,因为git pull
或svn up
会失败。
我正在寻找这个问题的解决方案,例如通过我可以放在#!/bin/sh
行中的特定选项,或者某种shell单行,这可能会导致脚本在安全中复制自己放置并执行副本。
答案 0 :(得分:3)
您可以让脚本重新执行。像这样拆分:
#!/bin/sh
if test -z "$MYSCRIPT_REEXEC"; then
: stuff you do before git pull
exec env MYSCRIPT_REEXEC=1 sh -c "git pull; . '$0'"
fi
: stuff you do after git pull
这是一个简单的例子,$0
可能不包含叛逆者,并且上半部分中设置的参数和任何变量都是不可访问的。很难给出一个更好的通用示例 - 也许,如果我能看到原始脚本?
如果此仍不起作用,请尝试以下方法:
#!/bin/sh
if test -z "$MYSCRIPT_REEXEC"; then
: stuff you do before git pull
env MYSCRIPT_REEXEC=1 sh -c "sleep 1; git pull; . '$0'" &
exit 0
fi
: stuff you do after git pull
在这种情况下,返回代码也都是错误的,等待脚本的任何内容都是错误的。