it-swarm-ko.tech

zsh의 사용자 또는 루트에 따라 프롬프트 색상 변경

zsh에서는 %# (또는 Prompt 변수)에 PS1를 포함 할 수 있습니다. 이는 기본적으로 사용자 인 경우 %를 표시하거나 # 루트 인 경우. 사용자인지 루트인지에 따라 % 또는 #가 색상을 변경하도록 영향을 미칠 수있는 방법이 있는지 궁금합니다 (루트는 빨간색, 사용자는 파란색). 분명한 방법은 내 루트의 PS1에서 ~/.zshrc를 변경하는 것입니다. 그러나 이것이 이미 특별한 기호임을 고려하면 동일한 PS1 둘 다에 대해 ... zsh와 같이 %#에만 해당하는 것입니다 (if then 문처럼 할 수있는 다른 해킹도있을 것입니다).

13
xenoterracide

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

루트 인 경우 호스트 이름 (%m)을 다른 색상 (빨간색)으로 변경 해야합니다. 테스트 할 zsh 셸이 없지만 올바르게 보입니다.

그 이유는 다음과 같습니다.

%(x.true.false) :: 삼항의 첫 번째 항의 평가에 따라 올바른 문을 실행합니다. '!' 셸에 권한이 있으면 true입니다. 사실 %#%(!.#.%)의 단축키입니다.

%{\e[1;31m%} %m %{\e[0m%} :: %{\e[X;Ym%}는 X를 서식 (굵게, 밑줄 등)으로, Y를 색상 코드로 사용하는 색상 이스케이프 시퀀스입니다. 색상을 변경하려는 용어 주변의 시퀀스를 열고 닫아야합니다. 그렇지 않으면 해당 지점 이후의 모든 색상이 색상이됩니다. 여기서는 명확성을 위해 프롬프트 용어 %m 주위에 공백을 추가했습니다.

http://www.nparikh.org/unix/Prompt.php 에는 zsh에 사용할 수있는 색상 표 및 기타 사용 가능한 옵션에 대한 더 많은 옵션과 세부 정보가 있습니다.

8
nzwulfin
autoload colors
colors
PS1="%~ %{%(#~$fg[red]~$fg[blue])%}%#%{$fg[default]%} "

%(#는 셸이 루트로 실행 중인지 여부를 테스트합니다. 이 값을 %(!로 변경하면 셸이 상승 된 권한으로 실행되는지 여부를 테스트합니다 (newgrp와 같은 항목을 다루지 만 루트로 로그인하지 않음).