ทำให้ PS1 ของ Bash แสดงชื่อไดเรกทอรีดั้งเดิมไม่ใช่ symlink ใช่ไหม


3

ฉันมี PS1='\W' แต่เมื่ออยู่ในไดเรกทอรีลิงก์สัญลักษณ์สัญลักษณ์จะแสดงชื่อ symlink ฉันจะทำให้ PS1 แสดงชื่อไดเรกทอรีดั้งเดิมได้อย่างไร

คำตอบ:


5

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