Xác nhận Thư mục làm việc hiện tại IS dựa trên số inode, không phải những gì bạn đã tìm kiếm để đến đó. Vì bạn đang sử dụng bash, bạn có thể sử dụng $ PWD như sau để cd vào thư mục mới cùng tên:
cd $ NKT
Để minh họa, tôi đã thực hiện một lệnh triển khai giả:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
Đã tạo triển khai đầu tiên, cd'd để mã và sau đó kiểm tra nội dung ls -lai
để bạn có thể thấy các nút:
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
Bây giờ chạy triển khai thứ 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
Và kiểm tra nội dung thư mục ... bây giờ không có gì trong thư mục! thậm chí không '.' và '..'! Từ điều này, bạn có thể thấy rằng bash không sử dụng mục nhập thư mục '..' khi bạn chạy cd ..
kể từ '..' không còn tồn tại - tôi cho rằng đó là một phần của việc xử lý $ PWD của nó. Một số shell khác / cũ hơn không xử lý cd ..
trong tình huống này, trước tiên bạn phải cd đến một đường dẫn tuyệt đối.
ianh@abe:~/tmp/code$ ls -lai
total 0
Cd đến $PWD
và thử lại:
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
Lưu ý cách inode cho thư mục hiện tại (.) Thay đổi?
Nếu tập lệnh triển khai của bạn chuyển thư mục cũ sang một tên khác, ví dụ như mv code code.$$
trong tập lệnh triển khai ở trên, thì ./run
nó sẽ hoạt động, nhưng cho đến khi bạn sử dụng, cd $PWD
bạn sẽ chạy mã cũ chứ không phải mã mới.
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
Việc triển khai bằng capistrano có cùng một vấn đề (Họ có một liên kết tượng trưng từ tên hiện tại đến bản phát hành hiện tại), vì vậy tôi sử dụng bí danh để cd cho các khu vực sản xuất / dàn dựng cũng như đặt RAIL_ENV một cách thích hợp:
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'