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)