Confirmation Le répertoire de travail actuel EST basé sur le numéro d'inode, pas sur ce que vous avez recherché pour y arriver. Puisque vous utilisez bash, vous pouvez utiliser $ PWD comme suit pour accéder au nouveau répertoire du même nom:
cd $ PWD
Pour illustrer, j'ai fait une commande de déploiement factice:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
Créé le premier déploiement, cd'd pour coder puis vérifié le contenu avec ls -lai
afin que vous puissiez voir les inodes:
ianh@abe:~/tmp$ ./,deploy first
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from first
++ chmod +x code/run
ianh@abe:~/tmp$ cd code
ianh@abe:~/tmp/code$ ls -lai
total 12
22945913 drwxr-xr-x 2 ianh ianh 4096 Apr 9 23:12 .
22937618 drwxrwxr-x 14 ianh ianh 4096 Apr 9 23:12 ..
22939455 -rwxr-xr-x 1 ianh ianh 22 Apr 9 23:12 run
Exécutez maintenant le 2e déploiement
ianh@abe:~/tmp/code$ ../,deploy 2nd
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from 2nd
++ chmod +x code/run
Et vérifiez le contenu du répertoire ... maintenant il n'y a rien dans le répertoire! pas même '.' et '..'! De cela, vous pouvez voir que bash n'utilise pas l'entrée de répertoire «..» lorsque vous exécutez cd ..
depuis que «..» n'existe plus - je suppose que sa partie de sa gestion de $ PWD. Certains autres / anciens shell ne gèrent pas cd ..
dans cette situation, vous devez d'abord accéder à un chemin absolu.
ianh@abe:~/tmp/code$ ls -lai
total 0
Cd $PWD
et réessayez:
ianh@abe:~/tmp/code$ cd $PWD
ianh@abe:~/tmp/code$ ls -lai
total 12
22945914 drwxr-xr-x 2 ianh ianh 4096 Apr 9 23:12 .
22937618 drwxrwxr-x 14 ianh ianh 4096 Apr 9 23:12 ..
22939455 -rwxr-xr-x 1 ianh ianh 20 Apr 9 23:12 run
ianh@abe:~/tmp/code$ ./run
hello from 2nd
Notez comment l'inode du répertoire actuel (.) A changé?
Si votre script de déploiement a déplacé l'ancien répertoire vers un autre nom, par exemple mv code code.$$
dans le script de déploiement ci-dessus, ./run
cela fonctionnerait, mais jusqu'à ce que vous l'utilisiez, cd $PWD
vous exécutez l' ancien code, pas le nouveau.
ianh@abe:~/tmp/code$ ./run
hello from 2nd
ianh@abe:~/tmp/code$ ../,deploy 3rd
++ cd /home/ianh/tmp
++ '[' -d code ']'
++ mv code code.9629
++ mkdir code
++ echo echo hello from 3rd
++ chmod +x code/run
ianh@abe:~/tmp/code$ ./run
hello from 2nd
ianh@abe:~/tmp/code$ cd $PWD
ianh@abe:~/tmp/code$ ./run
hello from 3rd
Le déploiement à l'aide de capistrano a le même problème (ils ont un lien symbolique du nom actuel vers la version actuelle), donc j'utilise des alias pour cd vers les zones de production / mise en scène ainsi que pour définir RAIL_ENV de manière appropriée:
alias cdp='export RAILS_ENV=production; echo RAILS_ENV=$RAILS_ENV ; cd /var/www/www.example.com/current'
alias cds='export RAILS_ENV=staging; echo RAILS_ENV=$RAILS_ENV ; cd /var/www/staging.example.com/current'