3

通常、シェル スクリプトを実行する場合、シェルは実行中ずっとスクリプト ファイルを開いたままにします。Unix システムでは、これは問題ではありません。

ただし、Windows は、その方法で開かれたファイルへの変更を防ぎます。つまり、スクリプトが MSYS で実行されている場合、スクリプトを変更する前にシェルを強制終了する必要があります。git pullまたはsvn up失敗するため、これは面倒です。

私はその問題の解決策を探しています。たとえば、#!/bin/sh行に入れることができる特定のオプションや、スクリプトを安全な場所にコピーして代わりにコピーを実行させるシェルのワンライナーなどです。

4

1 に答える 1

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

ただし、この場合、スクリプトを待機しているものと同様に、戻りコードすべて間違っています。

于 2014-12-30T18:43:28.380 に答える