zsh
Coba ini:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Berikut ini rincian dari prompt:
- PROMPT_SUBST mengaktifkan substitusi perintah di prompt (dan perluasan parameter dan ekspansi aritmatika)
%{...%}
- urutan pelarian
$(pwd|grep --color=always /)
- cetak direktori saat ini dan sorot /
- warna akan tergantung pada variabel lingkungan $ GREP_COLORS (atau nilai standarnya) - tebal merah adalah default
%${#PWD}G
- gunakan panjang karakter karakter dari direktori saat ini sebagai nilai kesalahan. Ini membuat shell menganggap ini sebagai panjang dari urutan karakter sebelumnya (setelah " %{
") alih-alih panjang sebenarnya dari string yang mencakup urutan escape ANSI. Ini menjaga shell agar tidak bingung tentang posisi kursor relatif terhadap akhir prompt.
- - - - - - - ini adalah akhir dari bagian yang menjawab pertanyaan Anda - - - - - - -
%(!.%F{red}.%F{cyan})
- jika ini adalah shell istimewa (root) atur warna foreground menjadi merah, jika tidak cyan
%n
- Keluarkan nama pengguna
%f
- mengatur ulang warna latar depan ke default
@
- Tanda harafiah
%F{yellow}
- membuat warna foreground menjadi kuning
%m
- Keluarkan nama host
%f
- mengatur ulang warna latar depan ke default
%(!.%F{red}.)
- jika ini adalah shell istimewa (root) atur warna foreground menjadi merah
%#
- Output a #
untuk shell istimewa atau %
untuk shell yang tidak terjangkau
%f
- mengatur ulang warna latar depan ke default
Saya menempatkan jalan pertama dalam prompt ini untuk penekanan, karena pertanyaannya menyangkut jalan.
Ini adalah versi untuk zsh yang mengubah warna garis miring tergantung pada apakah Anda root (diistimewakan) dengan memanipulasi $GREP_COLORS
variabel:
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 '
Pesta
Anda dapat melakukan prompt serupa di Bash. Dalam contoh ini, saya telah menempatkan pengguna dan nama host terlebih dahulu dan warna garis miring juga berubah ketika UID adalah 0. Peringatan: ini menimpa $PS1
variabel prompt Bash . Itu seharusnya tidak menjadi masalah kecuali jika Anda melakukan sesuatu yang istimewa atau Anda mengharapkan perilaku berubah ketika Anda mengatur variabel itu secara langsung dan ini berlaku. Juga, ini menggunakan variabel yang disebut " usercolor
" yang mungkin bertabrakan dengan sesuatu yang lain, meskipun semua ini bisa dimasukkan ke dalam fungsi dan variabel dideklarasikan secara lokal.
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\] "'
Saya mengambil keuntungan dari fakta bahwa Bash tidak memiliki fitur "glitch" zsh untuk menggunakan substitusi ekspansi parameter untuk secara kondisional mewarnai garis miring (daripada menggunakan grep).