Подтверждение Текущий рабочий каталог основан на номере инода, а не на том, что вы искали, чтобы попасть туда. Поскольку вы используете bash, вы можете использовать $ PWD следующим образом для перехода в новый каталог с тем же именем:
CD $ PWD
Чтобы проиллюстрировать это, я сделал фиктивную команду развертывания:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
Создал первое развертывание, cd'd для кодирования, а затем проверил содержимое, ls -lai
чтобы вы могли видеть 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
Теперь запустите 2-е развертывание
ianh@abe:~/tmp/code$ ../,deploy 2nd
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from 2nd
++ chmod +x code/run
И проверьте содержимое каталога ... теперь в каталоге ничего нет! даже не '.' и '..'! Из этого вы можете видеть, что bash не использует запись каталога «..» при запуске, cd ..
поскольку «..» больше не существует - я предполагаю, что это часть его обработки $ PWD. Некоторые другие / более старые оболочки не справляются cd ..
с этой ситуацией, сначала вы должны перейти на абсолютный путь.
ianh@abe:~/tmp/code$ ls -lai
total 0
Перейдите $PWD
и попробуйте снова:
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
Обратите внимание, как изменился индекс для текущего каталога (.)?
Если ваш сценарий развертывания перенес старый каталог на другое имя, например, mv code code.$$
в приведенном выше сценарии развертывания, он ./run
будет работать, но до тех пор , пока вы его не используете, cd $PWD
вы будете запускать старый код, а не новый.
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
Развертывание с использованием capistrano имеет ту же проблему (у них есть символическая ссылка от имени текущего к текущему выпуску), поэтому я использую псевдонимы для cd в производственных / промежуточных областях, а также соответственно устанавливаю RAIL_ENV:
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'