ฉันจะแสดงเส้นทางสัมบูรณ์ใน bash prompt ได้อย่างไร


50

ขณะนี้ฉันมีPS1ชุดทุบตีเป็นดังนี้:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ "

ฉันจะทำให้มันแสดงเส้นทางสัมบูรณ์แทนเส้นทางสัมพัทธ์ (เช่น/home/dave/dirแทนที่จะเป็น~/dir) ได้อย่างไร


1
/home/dave/dirและ~/dirเป็นทั้งพา ธ สัมบูรณ์ที่สองใช้ตัวย่อสำหรับโฮมไดเร็กทอรีของคุณ เส้นทางสัมพัทธ์คือเส้นทางที่สัมพันธ์กับไดเรกทอรีปัจจุบันของคุณ (เช่น../dir) แทนที่จะเริ่มที่รูท ( /)
Doug Harris

3
ps ใช้สีเพื่อบ่งบอกสถานะการออกของคำสั่งก่อนหน้า อาจเป็นการใช้สีครั้งแรกในทันทีที่ฉันชอบ
Doug Harris

@Doug Harris: ขอบคุณสำหรับการแก้ไข ฉันชอบสีนี้ด้วย จำไม่ได้ว่าฉันเห็นมันครั้งแรกที่ไหน (อาจจะอยู่ในตำแหน่งก่อนหน้านี้ของ SU)
David B

\u@\H[\w]:~\$ทำให้user@host[~/path]:~$
JREAM

คำตอบ:


49

เพียงแทนที่\wด้วย\$PWD:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "

อย่างไรก็ตามถ้าคุณใส่ใจเคล็ดลับเล็กน้อยฉันจะเขียนสิ่งที่ชอบ:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '

4
ฉันคิดถึงสิ่งนี้เช่นกัน แต่$PWDจะถูกประเมินในเวลาที่มอบหมายให้PS1ไม่ใช่ในแต่ละการโทร แต่ถ้าคุณหนีเครื่องหมายดอลลาร์ก็จะทำงาน \$PWD- ด้วยสิ่งนี้เครื่องหมายดอลลาร์คือเครื่องหมายดอลลาร์ ณ เวลาที่มอบหมายและการประเมินตัวแปรจะเกิดขึ้นในแต่ละพรอมต์ +1 ถึงคุณ
Doug Harris

ถูกพลาด \, ฉันมักจะทำงานกับคำพูดเดียวถ้ามันเป็นไปได้ ขอบคุณ
cYrus

+1 ขอบคุณ! คุณช่วยอธิบายความมหัศจรรย์ให้กับ bash line อันสวยงามของคุณได้ไหม?
David B

แน่ใจ ฉันใช้ tput (ดู man tput สำหรับข้อมูลเพิ่มเติม) เพื่อเปลี่ยนสีแทนที่จะเขียนตัวควบคุมโดยตรงเพื่อความสะดวกในการอ่านและพกพา (?) ฉันยังลบเครื่องหมายคำพูดคู่และเครื่องหมายสแลชกลับโดยใช้เครื่องหมายคำพูดเดี่ยว ในที่สุดโดยใช้ตัวแปรฉันหลีกเลี่ยงความซ้ำซ้อนบางอย่าง
cYrus


0

ใน ps1 ของ bash; -W ควรเป็นแบบสัมพัทธ์และ -w สัมบูรณ์ดังนั้นในข้างต้นคุณควรมีค่าสัมบูรณ์หรือไม่!

http://wiki.archlinux.org/index.php/Color_Bash_Prompt


3
ฉันคิดว่าคุณสับสนอย่างแน่นอน | เทียบกับเต็ม | current_dir Wแสดงเฉพาะชื่อไดเรกทอรีปัจจุบันwแสดงเส้นทางแบบเต็ม แต่ยังคงใช้เส้นทางสัมพัทธ์
David B

เป็นคำศัพท์ใน URL ไม่ระเบิด :)
Sirex

0

Humm ~ / dir เป็นเส้นทางที่แน่นอน แต่ใช้ "ทางลัด" ตัวอย่างเช่นหากคุณทำcd /usr/localพร้อมท์ของคุณอาจจะแสดงเส้นทางแบบเต็มของ / usr / local อย่างไรก็ตามคุณมีเส้นทางเต็มแล้ว :-)

แต่อาจเป็นคำถามที่ถูกต้องของคุณคือการแสดงเส้นทางแบบเต็มโดยไม่ใช้ทางลัดเช่น ~?

อย่างไรก็ตามฉันไม่ทราบคำตอบสำหรับสิ่งนั้นและมองไปที่ชายคนนั้นดูเหมือนว่าจะมีหนึ่งเอกสาร (อย่างน้อยก็เอกสาร)


0

เรียกแทนการใช้pwd\W

รุ่นง่าย:

export PS1="\`pwd\` $ "

ใช้สิ่งนี้ในรหัสของคุณ:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "

1
จุดเล็กน้อย: ตามคู่มือสไตล์ทุบตีของ Google ให้เลือก $ (pwd) ถึง backticks เนื่องจาก backticks ต้องการการหลบหนีเมื่อวางซ้อนและ $ () ไม่ได้
funroll
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.