PS1 설정을 사용한 컬러 텍스트와 명령의 컬러 출력이 서로 혼동됩니다.

PS1 설정을 사용한 컬러 텍스트와 명령의 컬러 출력이 서로 혼동됩니다.

터미널의 모든 텍스트에 색상이 지정되도록 하는 PS1시작 색상 시퀀스(예: )로 끝 납니다 (이 경우 녹색). \[\e[0;32m\]그러나 (my 의 별칭)과 같은 명령을 사용하면 ls출력의 색상이 약간 혼란스러워집니다. 첫 번째 "색상" 단어는 녹색이고 그 뒤에 나오는 색상이 지정되지 않은 텍스트는 녹색이 아닌 흰색입니다.ls --color=auto.bashrc

모든 경우에 깨끗한 출력을 얻을 수 있는 방법이 있습니까? 출력에 색상이 있는 경우 흰색을 "기본" 텍스트 색상으로 사용할 수 있지만 일관성을 유지하고 싶습니다.

물론 제가 가장 원하는 것은 모든 명령에 자동으로 적용되고 호출 방식을 변경할 필요가 없는 솔루션입니다.

개인적으로 나는 전혀 모른다. 어쩌면 "즉시" 이스케이프 시퀀스에 대한 출력을 검색하고 일부 교체를 수행하기 위해 뭔가를 수행할 수 있을까요? 하지만 이를 구현하는 방법을 모르겠습니다. 특히 "무대 뒤에서" 수행되므로 더욱 그렇습니다.

답변1

그 이유는 당신이 잘못하고 있기 때문입니다.

프롬프트 끝에 "개방형" 색상 순서가 있다고 하셨습니다. 이것은 잘못된 것입니다. 색상둥지를 짓지 않고. "켜기"와 "끄기"가 없습니다. "전환..." 또는 "기본값으로 재설정"(실제로는 "0으로 전환")입니다. 따라서 ls --color=auto작업이 완료된 후 색상이 전환되면 기본값으로 재설정되는 시퀀스가 ​​생성됩니다. 이것은 "이전의 방식으로의 복귀"가 아닙니다.

"기본값"(예: 팔레트 번호 0)을 원하는 텍스트 색상을 사용하도록 터미널을 설정하십시오. 그런 다음 프롬프트의 색상을 다르게 하려면 처음에 설정하고 마지막에 재설정하세요.

더 많은 정보를 원하시면 Bash Prompt HOWTO를 읽어보세요.6장 ANSI 이스케이프 시퀀스: 색상 및 커서 이동문서.

답변2

이전에 답변했듯이 PS1오프닝 색상 순서로 끝나는 것은 좋은 생각이 아닙니다. 이로 인해 색상 명령의 출력이 잘못됩니다. 터미널 전경색(일반 텍스트 색상)을 녹색으로 설정하려면 두 컴퓨터의 터미널 에뮬레이터 설정(이 경우 터미널 guake설정)에서 녹색으로 설정하면 됩니다. 이렇게 하면 전경색이 녹색으로 유지되고 컬러 출력 명령은 이 색상을 사용하여 일반 텍스트를 표시합니다. PS1완료를 사용해야 하므로 프롬프트를 재설정하세요 \[\e[0m\].

답변3

다음은 기계마다 다른 색상을 적용하는 방법에 대한 팁입니다.

case $HOSTNAME in
    host1*) PSC="\e[32m" ;;
    host2*) PSC="\e[33m" ;;
    host3*) PSC="\e[34m" ;;
    host4*) PSC="\e[35m" ;;
    *) PSC="\e[36m" ;;
esac

PS1="[\j]\[${PSC}\]\u@\h(\l) \[\e[37m\][ \w ]\[\e[00m\]\n\[\e[1m\]\#\[\e[0m\] \$ "

나머지는 직접 맛보셔도 됩니다. 사용하는 모든 컴퓨터에 ~/.bashrc의 복사본을 저장하세요. NFS 마운트 홈을 사용하는 경우 자동으로 수행됩니다.

관련 정보