zsh
이 시도:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
프롬프트는 다음과 같습니다.
- PROMPT_SUBST는 프롬프트에서 명령 대체 (및 매개 변수 확장 및 산술 확장)를 켭니다.
%{...%}
-이스케이프 시퀀스
$(pwd|grep --color=always /)
-현재 디렉토리를 인쇄하고 강조 표시합니다 /
-색상은 $ GREP_COLORS 환경 변수 (또는 기본값)에 따라 다릅니다.-굵은 빨간색이 기본값입니다.
%${#PWD}G
-현재 디렉토리 이름의 문자 길이를 글리치 값으로 사용하십시오. 이렇게하면 쉘이 %{
ANSI 이스케이프 시퀀스를 포함하는 문자열의 실제 길이 대신 이전 문자 시퀀스의 길이 ( " " 뒤 )를 고려하게됩니다. 이렇게하면 프롬프트의 끝을 기준으로 셸이 커서 위치에 대해 혼동되지 않습니다.
- - - - - - - - - - - 이 응답 부분의 끝 질문 - - - - - - - - - - - - -
%(!.%F{red}.%F{cyan})
-이것이 특권 쉘 (루트) 인 경우 전경색을 빨간색으로 설정하고, 그렇지 않으면 녹청
%n
-사용자 이름을 출력
%f
-전경색을 기본값으로 재설정
@
-문자 그대로
%F{yellow}
-전경색을 노란색으로 만듭니다.
%m
-호스트 이름을 출력
%f
-전경색을 기본값으로 재설정
%(!.%F{red}.)
-이것이 특권 쉘 (루트) 인 경우 전경색을 빨간색으로 설정하십시오.
%#
- 출력 A를 #
권한 쉘 또는 %
권한이없는 하나
%f
-전경색을 기본값으로 재설정
질문은 경로와 관련이 있기 때문에 강조를 위해이 프롬프트에서 경로를 먼저 넣습니다.
다음은 $GREP_COLORS
변수 를 조작하여 루트 (권한) 여부에 따라 슬래시 색상을 변경하는 zsh 버전입니다 .
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 '
세게 때리다
Bash에서도 비슷한 프롬프트를 수행 할 수 있습니다. 이 예에서는 사용자와 호스트 이름을 먼저 입력했으며 UID가 0 일 때 슬래시 색상도 변경됩니다. 경고 : Bash의 $PS1
프롬프트 변수를 덮어 씁니다 . 특별한 일을하거나 변수를 직접 설정할 때 동작이 변경 될 것으로 예상하지 않는 한 문제가되지 않습니다. 또한 이것은 " usercolor
" 이라는 변수를 사용하는데,이 변수는 다른 모든 것과 충돌 할 수 있지만,이 모든 것은 함수에 넣어 질 수 있고 변수는 local로 선언 될 수 있습니다.
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에 매개 변수 확장 대체를 사용하여 슬래시를 조건부로 채색하는 (그립을 사용하는 대신) zsh의 "글리치"기능이 없다는 사실을 이용했습니다.