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 -laiinode'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 $PWDtekrar 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 ./runzaman 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'