Conferma della directory di lavoro corrente È basata sul numero di inode, non su quello che hai cercato per arrivarci. Dato che stai usando bash, puoi usare $ PWD come segue per cd nella nuova directory con lo stesso nome:
cd $ PWD
Per illustrare, ho eseguito un comando deploy fittizio:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
Ha creato la prima distribuzione, cd per codificare e quindi controllato i contenuti in ls -lai
modo da poter vedere gli inode:
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
Ora esegui la seconda distribuzione
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 controlla il contenuto della directory ... ora non c'è nulla nella directory! nemmeno '.' e '..'! Da questo puoi vedere che bash non sta usando la voce della directory '..' quando esegui cd ..
da '..' non esiste più - presumo che faccia parte della sua gestione $ PWD. Alcune altre / vecchie shell non gestiscono cd ..
in questa situazione, devi prima effettuare il cd su un percorso assoluto.
ianh@abe:~/tmp/code$ ls -lai
total 0
Cd per $PWD
riprovare:
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
Notare come è cambiato l'inode per la directory corrente (.)?
Se lo script di distribuzione spostasse la vecchia directory su un altro nome, ad esempio, mv code code.$$
nello script di distribuzione sopra, ./run
funzionerebbe, ma fino a quando non utilizzi cd $PWD
si eseguirà il vecchio codice, non il nuovo.
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 distribuzione tramite capistrano ha lo stesso problema (hanno un collegamento simbolico dal nome corrente alla versione corrente), quindi uso gli alias per cd nelle aree di produzione / messa in scena e per impostare RAIL_ENV in modo appropriato:
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'