Mengkonfirmasi Direktori kerja saat ini didasarkan pada nomor inode, bukan apa yang Anda cari. Karena Anda menggunakan bash, Anda dapat menggunakan $ PWD sebagai berikut untuk melakukan cd ke direktori baru dengan nama yang sama:
cd $ PWD
Sebagai ilustrasi, saya membuat perintah dummy deploy:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
Membuat penyebaran pertama, cd'd ke kode dan kemudian memeriksa konten ls -lai
sehingga Anda dapat melihat 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
Sekarang jalankan penyebaran ke-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
Dan periksa isi direktori ... sekarang tidak ada apa pun di direktori! bahkan tidak '.' dan '..'! Dari sini Anda dapat melihat bahwa bash tidak menggunakan entri direktori '..' ketika Anda menjalankan cd ..
sejak '..' tidak ada lagi - saya kira itu bagian dari penanganan $ PWD-nya. Beberapa shell lain / lama tidak menangani cd ..
dalam situasi ini, Anda harus cd ke jalur absolut terlebih dahulu.
ianh@abe:~/tmp/code$ ls -lai
total 0
Cd ke $PWD
dan coba lagi:
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
Perhatikan bagaimana inode untuk direktori saat ini (.) Berubah?
Jika skrip deploy Anda memindahkan direktori lama ke nama lain, misalnya mv code code.$$
dalam skrip, deploy skrip di atas, maka ./run
akan berfungsi, tetapi sampai Anda menggunakan cd $PWD
Anda akan menjalankan kode lama , bukan yang baru.
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
Menyebarkan menggunakan capistrano memiliki masalah yang sama (Mereka memiliki symlink dari nama saat ini ke rilis saat ini), jadi saya menggunakan alias untuk cd ke area produksi / pementasan serta mengatur RAIL_ENV tepat:
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'