เข้าไปในไดเรกทอรีที่ลิงค์โดยลิงค์


12

เมื่อฉันcdลิงค์เส้นทางปัจจุบันของฉันจะถูกนำหน้าด้วยเส้นทางของลิงก์แทนที่จะเป็นเส้นทางของไดเรกทอรีที่ลิงก์ไปยังลิงก์ เช่น

~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic

~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic

~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$

ฉันต้องการให้เส้นทางปัจจุบันของฉันเปลี่ยนไปเป็นเส้นทางของ dir ที่เชื่อมโยงเพื่อที่ฉันจะสามารถทำงานกับผู้ปกครอง dirs ของ dir ที่เชื่อมโยงได้เช่นกัน นอกจากlsการเชื่อมโยงเพื่อค้นหา dir ที่เชื่อมโยงจากนั้นcdเข้าไปยังมันมีวิธีใดบ้างที่จะทำให้สำเร็จได้ง่ายขึ้น? ตัวอย่างเช่นหลังจากcdเป็นลิงก์คุณจะเปลี่ยนเส้นทางปัจจุบันเป็นเส้นทางของ dir ที่เชื่อมโยงได้อย่างไร

คำตอบ:


22

ด้วย POSIX เชลล์คุณสามารถใช้-Pตัวเลือกของcd builtin:

cd -P <link>

ด้วยbashจากman bash:

ตัวเลือก -P บอกว่าจะใช้โครงสร้างไดเรกทอรีทางกายภาพแทนการเชื่อมโยงสัญลักษณ์ (ดูที่ตัวเลือก -P ไปยังคำสั่ง set builtin)


7
คุณสามารถทำเช่นนี้หลังจากที่เดิมcd -P . cd
ctrl-alt-delor

5

คุณสามารถใช้เพื่อตรวจสอบที่จุดเชื่อมโยงของคุณและให้ผลผลิตนี้เป็นเป้าหมายของคุณreadlinkcd

cd "$(readlink <link>)"

ในกรณีของการ symlinks เพิ่มเติมที่ชี้ไปยัง symlinks ที่readlinkก็จะให้เป้าหมายเว้นแต่คุณจะระบุหนึ่งในตัวเลือกของมันที่จะปฏิบัติตาม symlinks readlink -f <link>ไปยังเป้าหมายที่ยอมรับไฟล์ตัวอย่างเช่น

readlink - ค่าพิมพ์ของลิงค์สัญลักษณ์หรือชื่อไฟล์แบบบัญญัติ

-f, - กำหนด
มาตรฐานให้เป็นมาตรฐานโดยทำตามทุก symlink ในทุกองค์ประกอบของชื่อที่กำหนดซ้ำ ทั้งหมดยกเว้นองค์ประกอบสุดท้ายจะต้องมีอยู่

-e, - สามารถ
กำหนดมาตรฐานให้เป็นมาตรฐานได้โดยปฏิบัติตามทุก symlink ในทุกองค์ประกอบของชื่อที่กำหนดซ้ำส่วนประกอบทั้งหมดจะต้องมีอยู่

-m, - ทำให้
เป็นมาตรฐานที่หายไปเป็นบัญญัติโดยปฏิบัติตามทุก symlink ในทุกองค์ประกอบของชื่อที่กำหนดซ้ำโดยไม่ต้องมีองค์ประกอบอยู่


5

Korn เชลล์ที่เหมือนกันติดตามลิงก์สัญลักษณ์ในพา ธ ไปยังไดเร็กทอรีปัจจุบัน (ซึ่งรู้จักกันในชื่อการติดตามไดเร็กทอรีโลจิคัลปัจจุบัน) หากคุณต้องการขยายลิงก์สัญลักษณ์ทั้งหมดให้ส่งตัวเลือก-Pไปยังcdbuiltin (สำหรับการติดตามไดเรกทอรีทางกายภาพปัจจุบัน):

cd -P logic

หากคุณอยู่ในไดเรกทอรีที่คุณเข้าถึงผ่านลิงก์สัญลักษณ์และต้องการเปลี่ยนไดเรกทอรีปัจจุบันที่ถูกติดตามเป็นเส้นทางที่มีลิงก์สัญลักษณ์ขยายให้เรียกใช้

cd -P .

pwd -Pหากคุณต้องการที่จะพิมพ์เส้นทางไปยังไดเรกทอรีปัจจุบันที่มีการเชื่อมโยงสัญลักษณ์ขยายระยะ ใน bash หากคุณต้องการปิดการติดตามแบบโลจิคัลให้รันset -P; ใน zsh เรียกใช้หรือset -wsetopt chase_links

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.