Confirmación El directorio de trabajo actual está basado en el número de inodo, no en lo que buscó para llegar allí. Como está usando bash, puede usar $ PWD de la siguiente manera para cd al nuevo directorio del mismo nombre:
cd $ PWD
Para ilustrar, hice un comando de despliegue ficticio:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
Creé el primer despliegue, lo codifiqué y luego verifiqué el contenido ls -lai
para que pueda ver los inodos:
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
Ahora ejecuta el segundo despliegue
ianh@abe:~/tmp/code$ ../,deploy 2nd
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from 2nd
++ chmod +x code/run
Y verifique el contenido del directorio ... ¡ahora no hay nada en el directorio! ni siquiera '.' y '..'! A partir de esto, puede ver que bash no está utilizando la entrada de directorio '..' cuando ejecuta cd ..
ya que '...' ya no existe; supongo que es parte de su manejo $ PWD. Algunos otros / antiguos shell no se manejan cd ..
en esta situación, primero debe cd a una ruta absoluta.
ianh@abe:~/tmp/code$ ls -lai
total 0
Cd $PWD
y vuelva a intentarlo:
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
¿Observa cómo cambió el inodo para el directorio actual (.)?
Si la secuencia de comandos de despliegue se trasladó al antiguo directorio a algún otro nombre, por ejemplo, mv code code.$$
en el, guión implementar arriba, entonces ./run
funcionaría, pero hasta que utilice cd $PWD
que sería correr el viejo código, no el nuevo.
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
La implementación con capistrano tiene el mismo problema (tienen un enlace simbólico desde el nombre actual hasta la versión actual), por lo que uso alias para cd a las áreas de producción / puesta en escena, así como establecer RAIL_ENV adecuadamente:
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'