การแก้ไขลิงก์สัญลักษณ์ (pwd)


32

พูดว่าฉันทำต่อไปนี้:

cd /some/path
ln -s /target/path symbolic_name

ถ้าเป็นเช่นนั้น:

cd /some/path
cd symbolic_name
pwd

ฉันเข้าใจ:

/some/path/symblic_name

และไม่:

/target/path

มีวิธีที่จะให้เชลล์ "แก้ปัญหาอย่างเต็มที่" ลิงก์สัญลักษณ์ (เช่นการอัปเดต CWD ฯลฯ ) ราวกับว่าฉันทำเสร็จแล้ว:

cd /target/path

?

ฉันต้องเรียกใช้บางโปรแกรมที่ดูเหมือนจะ "รับรู้" หรือ "ละเอียดอ่อน" เกี่ยวกับวิธีที่ฉันไปยังเส้นทางเป้าหมายของฉันและฉันต้องการให้พวกเขาคิดว่าฉันมาถึงเส้นทางเป้าหมายราวกับว่าทำcd /target/pathโดยตรง


7
เกี่ยวข้องกับคำถามนี้ คุณสามารถทำได้pwd -Pหรือalias pwd='pwd -P'ยังcd -Pที่จะไปเส้นทางกายภาพแทน symlink
Martín Canaval

@ MartínCanavalขอบคุณ; นั่นคือสิ่งที่ฉันกำลังมองหา!
Ryan

คำตอบ:


35

เปลือกของคุณมี builtin pwdซึ่งพยายามที่จะ "ฉลาด" หลังจากที่คุณได้cdทำการเชื่อมโยงไปยัง symlink แล้วภายในจะทำการpwdปลอมผลลัพธ์เช่นเดียวกับที่คุณย้ายไปยังไดเรกทอรีจริง

ผ่าน-Pตัวเลือกในการวิ่งเช่นpwd ตัวเลือก (สำหรับ“กาย”) บอกว่าไม่ต้องทำติดตามเชื่อมโยงใด ๆ ที่เป็นสัญลักษณ์และแสดงเส้นทาง“ของจริง” ไปยังไดเรกทอรีpwd -P-Ppwd

หรือมิฉะนั้นก็ควรมีไบนารีจริงpwdซึ่งไม่ได้ทำ (และยังไม่สามารถทำได้) เวทมนตร์ประเภทนี้ เพียงใช้การอธิบายแบบไบนารีนั้น:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ /bin/pwd
/home/michas/a

12

ลองcd -P <symlink_dirname>ดู

tim@ls:~$ mkdir a
tim@ls:~$ ln -s a b

tim@ls:~$ cd b
tim@ls:~/b$ pwd
/home/tim/b

tim@ls:~/b$ cd ..
tim@ls:~$ cd -P b
tim@ls:~/a$ pwd
/home/tim/a

คุณยังสามารถใช้set -o physicalเพื่อทำให้พฤติกรรมนี้คงอยู่ตลอดอายุการใช้งานของเชลล์ที่ทำงานอยู่

ตรวจสอบhttps://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-linksเพื่อรับข้อมูลที่ดี

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