모든 사람처럼 나에게도 맞춤 팁이 있습니다. 내 루트 사용자는 빨간색으로 바뀌고, 일반 사용자는 녹색으로 바뀌며, 기타 몇 가지 사항은 다음과 같습니다.
존재하다 bash.bashrc
:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n\$ '
존재하다 .bashrc
:
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
다음으로 이어진다:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n\$
일반 사용자의 경우..
이것이 제가 팁으로 할 수 있는 최선의 방법이지만 실제 고위 관리자가 자신의 팁을 저에게 공유했습니다.
PS1_Error="\[\033[31;1m\]"
PS1_Normal="\[\033[0m\]"
PS1_Inside='${debian_chroot:+($debian_chroot)}\u@\h:\w$bad\$ '
PS1="\`
retcode=\$? ;
if [ 0 -ne \$retcode ]; then
bad=\" [\\\\\\\$?=\$retcode]\"
echo \"$PS1_Error$PS1_Inside$PS1_Normal\"
else
bad='';
echo \"$PS1_Inside\";
fi;
\`"
unset PS1_Error PS1_Normal PS1_Inside
오류가 있으면 빨간색으로 변하는 놀라운 능력이 있습니다.오류 번호 표시!
난 너무 멍청해서 이해조차 못 해어떻게 작동하나요?(필수 변수가 설정되지 않았습니까???), 변수에 포함시키기에는 확실히 너무 멍청합니다. (그리고 오류 조건에 주황색을 원합니다...)
고위 관리자는 매우 바쁜 남자/여자/중립적인 사람이기 때문에 누군가 위의 내용을 이해하고 나에게 물고기를 가르치는 것보다 나에게 낚시하는 방법을 가르쳐주고 싶은 사람이 있는지 U&L에 묻습니다 . 좋은 점 PS1
과 어리석은 점을 혼합하고 여기서 무슨 일이 일어나고 있는지 설명할 수 있도록 도와주세요 .
답변1
다음 변수는 프롬프트 자체를 설명합니다.
PS1_Error="\[\033[31;1m\]"
PS1_Normal="\[\033[0m\]"
PS1_Inside='${debian_chroot:+($debian_chroot)}\u@\h:\w$bad\$ '
색상은 다음을 사용하여 수행됩니다.ANSI 이스케이프 코드. \033
이스케이프 문자(8진수 33 = 27)인 경우 [31;1m
텍스트 색상을 31로 설정하고 효과를 1로 설정합니다. [0m
효과를 모두 기본값인 0으로 설정합니다. 어떻게 PS1_Inside
들어왔는지 주목하세요하나의따옴표( ''
)는 이 단계에서 변수 대체를 수행하지 않음을 나타냅니다. (나중에 이런 일이 일어날 것입니다.)
진짜 마법은 여기에서 일어납니다.
PS1="\`
...
\`"
이는 실행 코드 내에서 PS1을 출력으로 설정합니다 ``
.변수 확장은 결과에 관계없이 발생합니다.코드가 실행됩니다프롬프트가 나타날 때마다. 코드 자체는 다음과 같이 실행됩니다.
retcode=\$? ;
$?
이전 명령의 결과를 포함합니다. 0은 정상을 의미하고, 그 밖의 모든 것은 실패 조건을 의미합니다. retcode
현재는 내부에 보관되어 있습니다 . 코드가 실행되는 동안 변수에 액세스하고 정의할 때 대체되지 않기를 원하기 때문에 모든 것을 이스케이프해야 합니다.
if [ 0 -ne \$retcode ]; then
0이 아니면 뭔가 잘못된 것입니다. 따라서 오류에 사용되는 프롬프트 스타일을 반영합니다. 위에서 bad
사용한 것은 PS1_Inside
색상 PS1_Error
을 변경하는 데 사용되며 PS1_Normal
색상을 다시 정상으로 변경하는 데 사용됩니다.
bad=\" [\\\\\\\$?=\$retcode]\"
echo \"$PS1_Error$PS1_Inside$PS1_Normal\"
else
이 경우에는 오류가 발생하지 않았으므로 색상을 지정하지 않고 출력만 합니다 PS1_Inside
. bad
프롬프트에 아무것도 표시되지 않도록 비워 두십시오.
bad='';
echo \"$PS1_Inside\";
fi;
마지막으로 환경이 복잡해지지 않도록 보조 변수의 설정을 해제합니다.
unset PS1_Error PS1_Normal PS1_Inside