การยืนยันไดเรกทอรีการทำงานปัจจุบันอ้างอิงหมายเลขไอโหนดไม่ใช่สิ่งที่คุณค้นหาเพื่อไปที่นั่น เนื่องจากคุณใช้ bash คุณสามารถใช้ $ PWD ดังต่อไปนี้เพื่อ cd ไปยังไดเรกทอรีใหม่ที่มีชื่อเดียวกัน:
cd $ PWD
เพื่อแสดงให้เห็นว่าฉันได้ทำคำสั่งปรับใช้ dummy:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
สร้างการปรับใช้ครั้งแรกแล้วให้เขียนโค้ดจากนั้นตรวจสอบเนื้อหาด้วยls -lai
เพื่อให้คุณเห็น inodes:
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
ตอนนี้เรียกใช้การปรับใช้ที่ 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
และตรวจสอบเนื้อหาของไดเรกทอรี ... ตอนนี้ไม่มีอะไรในไดเรกทอรี! ไม่แม้แต่ '.' และ '.. '! จากนี้คุณจะเห็นว่าทุบตีไม่ได้ใช้รายการไดเรกทอรี '.. ' เมื่อคุณเรียกใช้cd ..
ตั้งแต่ '.. ' ไม่มีอยู่อีกต่อไป - ฉันเข้าใจว่าส่วนหนึ่งของการจัดการ $ PWD เชลล์อื่น / เก่ากว่าบางตัวไม่จัดการcd ..
ในสถานการณ์นี้คุณต้อง cd ไปยังพา ธ สัมบูรณ์ก่อน
ianh@abe:~/tmp/code$ ls -lai
total 0
ซีดีถึง$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 มีปัญหาเดียวกัน (มี symlink จากชื่อปัจจุบันถึงรีลีสปัจจุบัน) ดังนั้นฉันใช้ aliases to 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'