ฉันมี PS1='\W'
แต่เมื่ออยู่ในไดเรกทอรีลิงก์สัญลักษณ์สัญลักษณ์จะแสดงชื่อ symlink ฉันจะทำให้ PS1 แสดงชื่อไดเรกทอรีดั้งเดิมได้อย่างไร
ฉันมี PS1='\W'
แต่เมื่ออยู่ในไดเรกทอรีลิงก์สัญลักษณ์สัญลักษณ์จะแสดงชื่อ symlink ฉันจะทำให้ PS1 แสดงชื่อไดเรกทอรีดั้งเดิมได้อย่างไร
คำตอบ:
บน Linux คุณสามารถใช้สิ่งต่อไปนี้:
export PS1='$( readlink -f . )'
ตัวอย่าง:
$ export PS1='$( readlink -f . ) \$ '
/home/danielbeck $ ln -s /etc foo
/home/danielbeck $ cd foo
/etc $ _
โปรดทราบว่าคุณจะยังคงอยู่ใน /home/danielbeck/foo
สำหรับทุกอย่างอื่นเช่นการแก้ไขไดเรกทอรีหลักด้วย cd ..
ดังนั้นเพื่อทำตัวอย่างต่อไป:
/etc $ cd ..
/home/danielbeck $ _
ตัวเลือกอื่นอาจแทนที่ cd
ด้วยฟังก์ชั่นที่เข้าสู่ไดเรกทอรี canonical แทนที่จะเป็น symlink บางสิ่งเช่น:
function cd {
if [[ $# -ne 1 ]] ; then
builtin cd "$@"
elif [[ "$1" = "-" ]] ; then
builtin cd -
else
builtin cd "$( readlink -f "$1" )"
fi
}
สิ่งนี้อาจใช้ได้กับทุก ๆ cd
ข้อโต้แย้งและสนับสนุนแม้กระทั่ง CDPATH
:
function cd {
builtin cd "$@"
builtin cd "$( readlink -f . )"
}