สร้างลิงก์สัญลักษณ์แบบสัมบูรณ์ไปยังไดเร็กทอรีปัจจุบัน


12

ตอนนี้ฉันอยู่ภายใต้ไดเรกทอรีที่มีเส้นทางที่ยาวมาก สำหรับการเยี่ยมชมในอนาคตนั้นเร็วกว่าฉันต้องการสร้างลิงก์ให้

ฉันเหนื่อย

ln -s . ~/mylink

~/mylinkเชื่อมโยงไปยัง~จริง ฉันจะขยาย~เข้าไปในชื่อพา ธ ที่ล้าสมัยแล้วให้มันได้lnหรือไม่

คำตอบ:


19

symlink จัดเก็บเส้นทางที่คุณให้ตามตัวอักษรเป็นสตริง actually นั่นหมายความว่าลิงก์ของคุณ~/mylinkมี " ." (หนึ่งตัวอักษร) เมื่อคุณเข้าถึงลิงก์เส้นทางนั้นจะถูกตีความโดยสัมพันธ์กับตำแหน่งของลิงก์ไม่ใช่ตำแหน่งที่คุณอยู่เมื่อคุณสร้างลิงก์

คุณสามารถเก็บเส้นทางที่แท้จริงที่คุณต้องการในลิงค์แทนได้

ln -s "$(pwd)" ~/mylink

ใช้การทดแทนคำสั่งเพื่อใส่ผลลัพธ์ของpwd(ชื่อไดเรกทอรีทำงาน) ลงในบรรทัดคำสั่งของคุณ lnเห็นเส้นทางแบบเต็มและเก็บไว้ใน symlink ของคุณซึ่งจะชี้ไปยังตำแหน่งที่ถูกต้อง

¹ มากหรือน้อย


2
ดูเพิ่มเติม"$PWD"ในเปลือกหอย POSIX และใน~0 zsh
Stéphane Chazelas

7

คุณควรใช้:

ln -s "$(cd . && pwd)" ~/mylink

หรือ:

ln -s "$(pwd -P)" ~/mylink

เพื่อให้ได้ผลลัพธ์ที่ถูกต้องสำหรับไดเรกทอรีการทำงานปัจจุบัน สามารถเปลี่ยนแปลงได้ในขณะที่คุณกำลังทำงานอยู่เหมือนในคำถามนี้


1
คนแรกไม่จำเป็นต้องช่วยในทุกเชลล์ (ดูคำตอบนี้ ) OP น่าจะต้องการใช้$PWD(เส้นทางที่เขาใช้เพื่อไปที่นั่น) มากกว่า$(pwd -P)(เส้นทางที่เป็นที่ยอมรับไปยังไดเรกทอรีปัจจุบัน) หาก$PWDไม่ได้ชี้ไปที่ไดเรกทอรีปัจจุบันอีกต่อไปก็ไม่มีการบอกว่า$(pwd -P)จะเกิดขึ้นในนาทีถัดไป
Stéphane Chazelas


@ StéphaneChazelas: คุณสามารถดูว่า"$PWD"ยังมีค่าเดิมถ้าย้ายไดเรคอรี่ปัจจุบัน PWDตั้งค่าเฉพาะเมื่อคุณcdหรือเริ่มต้นโดยเปลือก
cuonglm

แต่สิ่งที่ผมพูดคือว่า OP จะเป็นแนวโน้มที่จะต้องการ $ PWD เก่ากว่าเส้นทางที่แน่นอนบางอย่างเพื่อไดเรกทอรีการทำงานปัจจุบันและในเปลือกหอยหลายคน (ksh93 เถ้า Yash) ตามที่อธิบายไว้มีการเรียกร้องcdไม่ได้รับประกันว่าจะทำให้ $ PWD หรือผลลัพธ์ของ pwd เส้นทางไปยังไดเรกทอรีปัจจุบัน คุณกำลังพยายามป้องกันบางสิ่งที่ไม่น่าจะเกิดขึ้น แต่ในโซลูชันแรกนั่นไม่จำเป็นต้องมีประสิทธิภาพและในวินาทีที่เปลี่ยนพฤติกรรม
Stéphane Chazelas

1
หากมีใครทำอย่างmv นั้นหลังจากที่คุณทำคุณจะต้องlnอยู่ในสถานการณ์เดียวกัน ในทางตรงกันข้ามถ้าเขาทำcd /long/logical/path/to/some/directoryคุณไม่ต้องการให้ลิงก์ชี้ไปที่/vg0/lv1/user2/app4(เส้นทางแบบบัญญัติ) เนื่องจากลิงก์จะชี้ไปยังตำแหน่งที่ผิดเมื่อ/long/logical/path/to/some/directoryชี้ไปที่อื่น
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.