
터미널의 모든 텍스트에 색상이 지정되도록(이 경우 녹색) PS1
시작 색상 시퀀스(예: )로 끝 납니다 . 그러나 ( my 에서 별명이 붙은 ) \[\e[0;32m\]
과 같은 명령을 사용하면 출력의 색상이 약간 엉망이 됩니다. 첫 번째 "색상" 단어까지 녹색이고 다음의 색상이 지정되지 않은 텍스트는 녹색 대신 흰색입니다.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 마운트를 사용하는 경우 자동으로 수행됩니다.