MSYS shell保持脚本文件打开,防止修改

时间:2012-11-20 12:58:31

标签: windows shell sh file-descriptor msys

通常在运行shell脚本时,shell会在整个执行过程中保持脚本文件处于打开状态。在Unix系统上,这不是问题。

但是,Windows会阻止对以这种方式打开的文件进行修改。这意味着如果脚本在MSYS中运行,我需要在修改脚本之前终止shell。这很烦人,因为git pullsvn up会失败。

我正在寻找这个问题的解决方案,例如通过我可以放在#!/bin/sh行中的特定选项,或者某种shell单行,这可能会导致脚本在安全中复制自己放置并执行副本。

1 个答案:

答案 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

在这种情况下,返回代码都是错误的,等待脚本的任何内容都是错误的。