ตอนนี้ฉันอยู่ภายใต้ไดเรกทอรีที่มีเส้นทางที่ยาวมาก สำหรับการเยี่ยมชมในอนาคตนั้นเร็วกว่าฉันต้องการสร้างลิงก์ให้
ฉันเหนื่อย
ln -s . ~/mylink
~/mylink
เชื่อมโยงไปยัง~
จริง ฉันจะขยาย~
เข้าไปในชื่อพา ธ ที่ล้าสมัยแล้วให้มันได้ln
หรือไม่
ตอนนี้ฉันอยู่ภายใต้ไดเรกทอรีที่มีเส้นทางที่ยาวมาก สำหรับการเยี่ยมชมในอนาคตนั้นเร็วกว่าฉันต้องการสร้างลิงก์ให้
ฉันเหนื่อย
ln -s . ~/mylink
~/mylink
เชื่อมโยงไปยัง~
จริง ฉันจะขยาย~
เข้าไปในชื่อพา ธ ที่ล้าสมัยแล้วให้มันได้ln
หรือไม่
คำตอบ:
symlink จัดเก็บเส้นทางที่คุณให้ตามตัวอักษรเป็นสตริง actually นั่นหมายความว่าลิงก์ของคุณ~/mylink
มี " .
" (หนึ่งตัวอักษร) เมื่อคุณเข้าถึงลิงก์เส้นทางนั้นจะถูกตีความโดยสัมพันธ์กับตำแหน่งของลิงก์ไม่ใช่ตำแหน่งที่คุณอยู่เมื่อคุณสร้างลิงก์
คุณสามารถเก็บเส้นทางที่แท้จริงที่คุณต้องการในลิงค์แทนได้
ln -s "$(pwd)" ~/mylink
ใช้การทดแทนคำสั่งเพื่อใส่ผลลัพธ์ของpwd
(ชื่อไดเรกทอรีทำงาน) ลงในบรรทัดคำสั่งของคุณ ln
เห็นเส้นทางแบบเต็มและเก็บไว้ใน symlink ของคุณซึ่งจะชี้ไปยังตำแหน่งที่ถูกต้อง
¹ มากหรือน้อย
คุณควรใช้:
ln -s "$(cd . && pwd)" ~/mylink
หรือ:
ln -s "$(pwd -P)" ~/mylink
เพื่อให้ได้ผลลัพธ์ที่ถูกต้องสำหรับไดเรกทอรีการทำงานปัจจุบัน สามารถเปลี่ยนแปลงได้ในขณะที่คุณกำลังทำงานอยู่เหมือนในคำถามนี้
$PWD
(เส้นทางที่เขาใช้เพื่อไปที่นั่น) มากกว่า$(pwd -P)
(เส้นทางที่เป็นที่ยอมรับไปยังไดเรกทอรีปัจจุบัน) หาก$PWD
ไม่ได้ชี้ไปที่ไดเรกทอรีปัจจุบันอีกต่อไปก็ไม่มีการบอกว่า$(pwd -P)
จะเกิดขึ้นในนาทีถัดไป
"$PWD"
ยังมีค่าเดิมถ้าย้ายไดเรคอรี่ปัจจุบัน PWD
ตั้งค่าเฉพาะเมื่อคุณcd
หรือเริ่มต้นโดยเปลือก
cd
ไม่ได้รับประกันว่าจะทำให้ $ PWD หรือผลลัพธ์ของ pwd เส้นทางไปยังไดเรกทอรีปัจจุบัน คุณกำลังพยายามป้องกันบางสิ่งที่ไม่น่าจะเกิดขึ้น แต่ในโซลูชันแรกนั่นไม่จำเป็นต้องมีประสิทธิภาพและในวินาทีที่เปลี่ยนพฤติกรรม
mv
นั้นหลังจากที่คุณทำคุณจะต้องln
อยู่ในสถานการณ์เดียวกัน ในทางตรงกันข้ามถ้าเขาทำcd /long/logical/path/to/some/directory
คุณไม่ต้องการให้ลิงก์ชี้ไปที่/vg0/lv1/user2/app4
(เส้นทางแบบบัญญัติ) เนื่องจากลิงก์จะชี้ไปยังตำแหน่งที่ผิดเมื่อ/long/logical/path/to/some/directory
ชี้ไปที่อื่น
"$PWD"
ในเปลือกหอย POSIX และใน~0
zsh