MSYS shell gardant le fichier script ouvert, empêchant les modifications

Habituellement, lors de l’exécution d’un script shell, le shell garde le fichier de script ouvert tout au long de l’exécution. Sur les systèmes Unix, ce n’est pas un problème.

Toutefois, Windows empêche les modifications apscopes à un fichier ouvert de cette manière. Ce qui signifie que si un script est exécuté dans MSYS, je dois tuer le shell avant de pouvoir modifier le script. C’est ennuyeux parce que git pull ou svn up échouera.

Je cherche une solution à ce problème, par exemple à travers des options spécifiques que je pourrais mettre dans la ligne #!/bin/sh , ou une sorte de shell à une seule ligne qui pourrait amener le script à se copier en lieu sûr et exécuter la copie à la place.

    Vous pourriez laisser le script se ré-exécuter lui-même. Divisez le comme ceci:

     #!/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 

    C’est un cas simple, $0 peut ne pas contenir d’apostrophes, et les arguments et toutes les variables définies dans la première moitié sont inaccessibles. Il est difficile de donner un meilleur exemple générique – peut-être si je pouvais voir le script original?

    Si cela ne fonctionne toujours pas, essayez celui-ci:

     #!/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 

    Dans ce cas, cependant, les codes de retour seront tout faux, de même que tout ce qui attend le script.