Підтвердження поточного робочого каталогу IS на основі номера inode, а не того, що ви шукали, щоб потрапити туди. Оскільки ви використовуєте 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
щоб ви могли бачити вставки:
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
Cd до $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
Зверніть увагу, як змінився inode для поточного каталогу (.)?
Якщо розгорнути сценарій переміщений старий каталог з яким - або іншим ім'ям, наприклад , 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 має таку ж проблему (у них є посилання від поточного імені до поточного випуску), тому я використовую псевдоніми для переходу на області виробництва / постановки, а також встановити 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'