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의 "글리치"기능이 없다는 사실을 이용했습니다.