zsh
Bunu dene:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
İşte istemde bir dökümü:
- PROMPT_SUBST komut isteminde komut değiştirmeyi açar (ve parametre genişletme ve aritmetik genişletme)
%{...%}
- bir kaçış dizisi
$(pwd|grep --color=always /)
- geçerli dizini yazdır ve şunu /
vurgula - renk, $ GREP_COLORS ortam değişkenine (veya varsayılan değerine bağlı olacaktır) - koyu kırmızı varsayılandır
%${#PWD}G
- geçerli dizinin adındaki karakterlerin uzunluğunu bir aksaklık değeri olarak kullanın. Bu, kabuğun %{
, ANSI kaçış dizileri içeren dizinin gerçek uzunluğu yerine önceki karakter dizisinin (" " den sonra ) uzunluğunu göz önünde bulundurmasını sağlar . Bu, kabuğun imlecin isteminin sonuna göre konumu hakkında karışmasını önler.
- - - - - - - bu sorunuza cevap veren kısmın sonu - - - - - - -
%(!.%F{red}.%F{cyan})
- eğer bu ayrıcalıklı bir kabuksa (kök) ön plan rengini kırmızıya ayarla, aksi takdirde camgöbeği
%n
- kullanıcı adını çıkar
%f
- ön plan rengini varsayılan değerine sıfırlayın
@
- tabelaya bir hazır bilgi
%F{yellow}
- ön rengi sarıya çevirir
%m
- hostname çıktısı
%f
- ön plan rengini varsayılan değerine sıfırlayın
%(!.%F{red}.)
- eğer bu ayrıcalıklı bir kabuksa (kök) ön plan rengini kırmızı
%#
- #
ayrıcalıklı bir kabuk veya %
imtiyazsız bir kabuk için
%f
- ön plan rengini varsayılan değerine sıfırlayın
Soru yolu ilgilendirdiği için yolu ilk olarak bu vurgunun içine koydum.
$GREP_COLORS
Değişkenleri işleyerek root (ayrıcalıklı) olup olmadığına bağlı olarak eğik çizgi rengini değiştiren bir zsh sürümü :
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 '
darbe
Bash'de benzer bir bilgi istemi yapabilirsiniz. Bu örnekte, önce kullanıcı ve ana bilgisayar adını koydum ve UID 0 olduğunda eğik çizgilerin rengi de değişir. Uyarı: bu, Bash'in $PS1
komut istemi değişkeninin üzerine yazar . Özel bir şey yapmıyorsanız ya da doğrudan bu değişkeni ayarladığınızda davranışın değişmesini beklemiyorsanız ve bu geçerliyse, bu bir sorun olmamalıdır. Ayrıca, bu " usercolor
" adında bir değişkeni , başka bir şeyle çarpışabilir, ancak her şey bir işleve koyulabilir ve değişken yerel olarak bildirilir.
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'in eğik çizgileri koşullu olarak renklendirmek için (grep kullanmak yerine) parametre genişletme sübstitüsyonunu kullanmak için zsh'nin "glitch" özelliğine sahip olmaması gerçeğinden faydalandım.