Onaylama Geçerli çalışma dizini, oraya ulaşmak için aradığınız şeyi değil, inode numarasına dayalıdır. Bash kullandığınız için, aynı addaki yeni dizine cd olarak $ PWD kullanabilirsiniz:
cd $ PWD
Göstermek için, sahte bir komut verdim:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
İlk konuşlandırmayı oluşturdu, cd'd kodladı ve ardından ls -lai
inode'ları görebilmeniz için içeriği kontrol etti:
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
Şimdi 2. konuşlandırmayı çalıştırın
ianh@abe:~/tmp/code$ ../,deploy 2nd
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from 2nd
++ chmod +x code/run
Ve dizin içeriğini kontrol edin ... şimdi dizinde hiçbir şey yok! hatta '.' ve '..'! Bundan sonra, '..' cd ..
artık olmadığından beri çalıştırdığınızda bash '..' dizin girişini kullanmadığını görebilirsiniz - Ben onun $ PWD işlemenin bir parçası olduğunu varsayıyorum. Bazı diğer / eski kabuklar cd ..
bu durumda işlemez , önce mutlak bir yola cd yapmalısınız.
ianh@abe:~/tmp/code$ ls -lai
total 0
Cd ile $PWD
tekrar deneyin:
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
Geçerli dizinin (.) İnode'unun nasıl değiştiğine dikkat edin?
Konuşlandırma komut dosyanız eski dizini başka bir ada taşıdıysa, örneğin mv code code.$$
yukarıdaki dağıtım komut dosyasında, o ./run
zaman işe yarayacaktır, ancak kullanılana kadar yeni kodu değil, eski kodu cd $PWD
çalıştırırsınız .
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 kullanarak dağıtma aynı sorun var (Geçerli sürüm için geçerli adından bir symlink var), bu yüzden üretim / hazırlama alanlarına cd için takma adları kullanın ve RAIL_ENV uygun şekilde ayarlayın:
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'