zmień kolor zachęty w zależności od użytkownika lub roota w zsh

13

w zsh możesz mieć %#w swojej PS1(lub jakiejkolwiek PROMPTzmiennej), co w zasadzie oznacza wyświetlanie %jeśli użytkownik lub wyświetlanie #jeśli użytkownik root. Zastanawiam się, czy jest jakiś sposób, aby wpłynąć na to, aby %lub #zmieniał kolory w zależności od tego, czy jest to użytkownik czy root (czerwony dla roota, niebieski dla użytkownika) oczywistym sposobem jest po prostu zmiana PS1w moim rootie, ~/.zshrcale rozważanie to już jest specjalny symbol Zastanawiam się, czy nie ma sposobu, aby użyć tego samego PS1dla obu ... coś specyficznego do %#polubienia to dla zsh (jestem pewien, że są inne hacki, które mógłbym zrobić tak jak instrukcja if if).

ksenoterracid
źródło

Odpowiedzi:

8

%(!.%{\e[1;31m%}%m%{\e[0m%}.%{\e[0;33m%}%m%{\e[0m%})

To powinno działać, aby zmienić nazwę hosta ( %m) na inny kolor (czerwony), jeśli jesteś rootem. Nie mam powłoki Zsh do przetestowania jej, ale wygląda ona poprawnie.

Dlatego:

%(x.true.false):: Wykonaj poprawną instrukcję na podstawie oceny pierwszego semestru trójki. „!” jest prawdziwe, jeśli powłoka jest uprzywilejowana. W rzeczywistości %#jest skrótem do %(!.#.%).

%{\e[1;31m%} %m %{\e[0m%}:: %{\e[X;Ym%}jest sekwencją zmiany koloru z X jako formatowaniem (pogrubienie, podkreślenie itp.) i Y jako kodem koloru. Pamiętaj, że musisz otworzyć i zamknąć sekwencję wokół terminu, w którym chcesz zmienić kolor, w przeciwnym razie wszystko po tym punkcie będzie miało dowolny kolor. Dodałem tutaj spacje wokół szybkiego terminu %mdla jasności.

http://www.nparikh.org/unix/prompt.php ma więcej opcji i szczegółów dotyczących tabel kolorów i innych dostępnych opcji dla zsh.

nzwulfin
źródło
6
autoload colors
colors
PS1="%~ %{%(#~$fg[red]~$fg[blue])%}%#%{$fg[default]%} "

%(#sprawdza, czy powłoka działa jako root. Zmiana tej opcji w celu %(!sprawdzenia, czy powłoka działa z podwyższonymi uprawnieniami (która obejmuje takie rzeczy newgrp, ale nie loguje się jako root).

Gilles „SO- przestań być zły”
źródło