zsh
ลองสิ่งนี้:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
นี่คือรายละเอียดของพรอมต์:
- PROMPT_SUBST เปิดการทดแทนคำสั่งในพร้อมต์ (และการขยายพารามิเตอร์และการขยายเลขคณิต)
%{...%}
- ลำดับการหลบหนี
$(pwd|grep --color=always /)
- พิมพ์ไดเรกทอรีปัจจุบันและไฮไลต์/
- สีจะขึ้นอยู่กับตัวแปรสภาพแวดล้อม $ GREP_COLORS (หรือค่าเริ่มต้น) - ตัวหนาสีแดงเป็นค่าเริ่มต้น
%${#PWD}G
- ใช้ความยาวเป็นอักขระของชื่อของไดเรกทอรีปัจจุบันเป็นค่าความผิดพลาด สิ่งนี้ทำให้เชลล์พิจารณาความยาวของลำดับอักขระก่อนหน้า (หลัง " %{
") แทนที่จะเป็นความยาวจริงของสตริงซึ่งรวมถึงลำดับการหลีกเลี่ยงของ ANSI สิ่งนี้ทำให้เชลล์ไม่สับสนเกี่ยวกับตำแหน่งของเคอร์เซอร์ที่สัมพันธ์กับจุดสิ้นสุดของพรอมต์
- - - - - - - นี่คือจุดสิ้นสุดของส่วนที่ตอบคำถามของคุณ - - - - - - -
%(!.%F{red}.%F{cyan})
- ถ้านี่เป็นเปลือกพิเศษ (รูท) ให้ตั้งค่าสีพื้นหน้าเป็นสีแดงมิฉะนั้นจะเป็นสีฟ้า
%n
- เอาท์พุทชื่อผู้ใช้
%f
- รีเซ็ตสีพื้นหน้าเป็นค่าเริ่มต้น
@
- ตัวอักษรที่เครื่องหมาย
%F{yellow}
- ทำสีพื้นหน้าเป็นสีเหลือง
%m
- ส่งออกชื่อโฮสต์
%f
- รีเซ็ตสีพื้นหน้าเป็นค่าเริ่มต้น
%(!.%F{red}.)
- ถ้าเป็นเปลือกพิเศษ (รูท) ให้ตั้งค่าสีพื้นหน้าเป็นสีแดง
%#
- เอาต์พุต a #
สำหรับเชลล์ที่มีสิทธิใช้งานหรือ%
สำหรับเชลล์ที่ไม่มีสิทธิใช้งาน
%f
- รีเซ็ตสีพื้นหน้าเป็นค่าเริ่มต้น
ฉันใส่เส้นทางก่อนในการพร้อมท์นี้เพื่อเน้นเนื่องจากคำถามเกี่ยวข้องกับเส้นทาง
นี่คือเวอร์ชันสำหรับ zsh ที่เปลี่ยนสีสแลชขึ้นอยู่กับว่าคุณเป็นรูท (มีสิทธิใช้งาน) โดยการจัดการ$GREP_COLORS
ตัวแปร:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|([[ $EUID == 0 ]] && GREP_COLORS="mt=01;31" grep --color=always /|| GREP_COLORS="mt=01;34" grep --color=always /))%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
ทุบตี
คุณสามารถทำพรอมต์ที่คล้ายกันใน Bash ในตัวอย่างนี้ฉันได้ใส่ชื่อผู้ใช้และชื่อโฮสต์และสีของเครื่องหมายทับจะเปลี่ยนไปเมื่อ UID เป็น 0 คำเตือน: สิ่งนี้จะเขียนทับ$PS1
ตัวแปร prompt ของ Bash นั่นไม่ควรเป็นปัญหาเว้นแต่ว่าคุณกำลังทำอะไรเป็นพิเศษหรือคุณคาดหวังว่าพฤติกรรมจะเปลี่ยนไปเมื่อคุณตั้งค่าตัวแปรนั้นโดยตรงและสิ่งนี้จะมีผล นอกจากนี้ยังใช้ตัวแปรที่เรียกว่า " usercolor
" ซึ่งอาจชนกับสิ่งอื่นแม้ว่าสิ่งนี้ทั้งหมดจะถูกใส่ไว้ในฟังก์ชั่นและตัวแปรจะประกาศในเครื่อง
PROMPT_COMMAND='usercolor="\[\033[0;36m\]";[[ $EUID == 0 ]] && usercolor="\[\033[1;31m\]";PS1="$(pwd)";PS1="$usercolor\u\[\033[0m\]@\[\033[0;33m\]\h\[\033[0m\]:${PS1//\//$usercolor/\[\033[0m\]}$usercolor\\$\[\033[0m\] "'
ฉันใช้ประโยชน์จากข้อเท็จจริงที่ว่า Bash ไม่มีคุณสมบัติ "ความผิดพลาด" ของ zsh ในการใช้การแทนที่การขยายพารามิเตอร์เพื่อให้สีสแลชมีเงื่อนไข (แทนที่จะใช้ grep)