현재 작업 디렉토리 확인은 사용자가 찾은 것이 아니라 inode 번호를 기반으로합니다. bash를 사용하고 있으므로 다음과 같이 $ PWD를 사용하여 동일한 이름의 새 디렉토리로 cd 할 수 있습니다.
cd $ PWD
설명하기 위해 더미 배포 명령을 만들었습니다.
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
첫 번째 배포를 작성하고 cd로 코딩 한 다음 내용을 확인 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
이제 두 번째 배포를 실행하십시오.
ianh@abe:~/tmp/code$ ../,deploy 2nd
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from 2nd
++ chmod +x code/run
그리고 디렉토리 내용을 확인하십시오 ... 이제 디렉토리에 아무것도 없습니다! 심지어 '.' 그리고 '..'! 이것으로부터 cd ..'..'가 더 이상 존재하지 않으므로 bash가 '..'디렉토리 항목을 사용하고 있지 않다는 것을 알 수 있습니다 . $ PWD 처리의 일부로 가정합니다. cd ..이 상황에서는 다른 / 이전 쉘 이 처리하지 않으므로 절대 경로로 먼저 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를 사용한 배포는 같은 문제가 있습니다 (현재 이름에서 현재 릴리스로의 심볼릭 링크가 있습니다). 나는 별칭을 사용하여 프로덕션 / 준비 영역으로 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'