Confirmação O diretório de trabalho atual É baseado no número do inode, não no que você procurou para chegar lá. Como você está usando o bash, você pode usar $ PWD da seguinte maneira para cd no novo diretório com o mesmo nome:
cd $ PWD
Para ilustrar, criei um comando fictício deploy:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
Criou a primeira implementação, cd'd para codificar e depois verificou o conteúdo 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 a 2ª implantação
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 o bash não está usando a entrada de diretório '..' quando você executa, cd ..
já que '..' não existe mais - presumo que seja parte de seu tratamento com $ PWD. Alguns outros shell mais antigos / não lidam cd ..
com essa situação, você deve primeiro procurar um caminho absoluto.
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 para o diretório atual (.) Mudou?
Se o script de implantação moveu o diretório antigo para outro nome, por exemplo, mv code code.$$
no script de implantação acima, ./run
funcionaria, mas até você usá- cd $PWD
lo, você estaria 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 o capistrano tem o mesmo problema (eles têm um link simbólico do nome atual para o release atual), portanto, eu uso aliases para fazer o cd nas áreas de produção / preparação, além de definir RAIL_ENV adequadamente:
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'