Confirmando O diretório de trabalho atual é baseado no número de inode, não o que você procurava para chegar lá. Como você está usando o bash, você pode usar o $ PWD da seguinte forma para o cd no novo diretório com o mesmo nome:
cd $ PWD
Para ilustrar, criei um comando de implantação simulado:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
Criou a primeira implantação, escreveu o cd para codificar e, em seguida, verificou o conteúdo com ls -lai
para que você possa ver os 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
Agora execute o segundo deploy
ianh@abe:~/tmp/code$ ../,deploy 2nd
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from 2nd
++ chmod +x code/run
E verifique o conteúdo do diretório ... agora não há nada no diretório! nem mesmo '.' e '..'! A partir disso você pode ver que bash não está usando a entrada de diretório '..' quando você executa cd ..
desde que '..' não existe mais - Eu presumo que seja parte de sua manipulação $ PWD. Alguns shell / shell mais antigos não suportam cd ..
nesta situação, você tem que fazer um cd para um caminho absoluto primeiro.
ianh@abe:~/tmp/code$ ls -lai
total 0
Cd para $PWD
e tente novamente:
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
Observe como o inode do diretório atual (.) mudou?
Se o script de implantação movesse o diretório antigo para outro nome, por exemplo, mv code code.$$
no script de implantação acima, então ./run
funcionaria, mas até você usar cd $PWD
estar executando o código antigo , não o novo.
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
A implantação usando capistrano tem o mesmo problema (eles têm um link simbólico do nome atual para o release atual), então eu uso aliases para cd nas áreas de produção / preparação, bem como configure RAIL_ENV apropriadamente:
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'