zsh의 사용자 또는 루트를 기반으로 프롬프트 색상 변경

zsh의 사용자 또는 루트를 기반으로 프롬프트 색상 변경

zsh에서는 기본적으로 사용자 표시 또는 루트 표시를 의미하는 변수 (또는 모든 변수) %#에 하나를 추가할 수 있습니다 . 이것에 영향을 미칠 수 있는 방법이 있는지 궁금합니다. 또는 사용자인지 루트인지(루트는 빨간색, 사용자는 파란색)에 따라 색상을 변경 합니다. 확실한 방법은 내 루트에서 을 변경하는 것입니다 . 그러나 이것을 고려하면 이미 특수 기호입니다. 둘 다에 동일한 기호를 사용할 수 있는 방법이 없는지 궁금합니다 . zsh에 특정한 것입니다(if then 문과 같이 제가 할 수 있는 다른 해킹이 있을 것이라고 확신합니다).PS1PROMPT%#%#PS1~/.zshrcPS1%#

답변1

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

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

이유는 다음과 같습니다.

%(x.true.false):: 삼중항의 첫 번째 항목에 대한 평가를 바탕으로 올바른 진술을 실행하세요. '! '쉘에 권한이 있으면 참입니다. 실제로는 %#바로가기입니다 %(!.#.%).

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

http://www.nparikh.org/unix/prompt.phpzsh에서 사용할 수 있는 컬러맵 및 기타 옵션과 관련된 더 많은 옵션과 세부 정보가 있습니다.

답변2

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

%(#쉘이 루트로 실행 중인지 테스트합니다. 이 설정을 변경하여 %(!셸이 상승된 권한으로 실행되고 있는지 테스트합니다(그런 내용을 포함 newgrp하지만 루트로 로그인하지 않음).

관련 정보