명령이 끝나면 bash 쉘 PS1 색상을 중지하는 방법은 무엇입니까?

명령이 끝나면 bash 쉘 PS1 색상을 중지하는 방법은 무엇입니까?

저는 실제 셸 명령이 다른 색상으로 표시되는 사용자 정의 PS1 색상을 사용하여 입력한 명령을 빠르게 확인하고 명령 출력 자체와 구분할 수 있습니다.

PS1의 명령 프롬프트 색상이 "파란색"으로 설정되어 있고 내 셸의 기본 색상이 흰색이라고 가정해 보겠습니다.

  • ls와 같은 명령을 입력합니다. (ls -l은 파란색입니다.)
  • 생성된 출력, 첫 번째 줄은 여전히 ​​파란색입니다.
  • 나머지 선은 모두 흰색입니다.

내가 원하는 것은 명령 이후의 모든 출력이 "흰색"이 되는 것입니다.

다른 예시:

  • "cat"이라는 명령을 입력했는데 색상이 파란색입니다.
  • 출력이 나오고 전체 출력이 파란색입니다.

"파란색"으로 입력하는 명령 프롬프트를 유지하면서 출력을 "흰색"으로 만들고 싶습니다.

일부 명령에서는 괜찮지만, 다른 명령에서는 동일한 색상이 출력의 첫 번째 줄에 넘치고 기본 색상이 시작되고, 다른 명령에서는 전체 출력(예: cat)이 동일한 색상을 갖습니다.

입력한 명령만 한 가지 색상으로 유지하고 나머지는 기본 색상으로 유지하는 방법이 있나요?

저는 OSX를 사용하고 있습니다.

편집 #1

내가 찾고 있는 것을 보여주는 댓글에 링크된 @derobert 스크린샷은 다음과 같습니다.

                 번호 1

답변1

기본적으로 bash가 명령을 실행하기 전에 터미널 색상을 재설정하려고 합니다. 이건 통과할 수 있습니다 trap.

예를 들어:

trap '[[ -t 1 ]] && tput sgr0' DEBUG

Bash는 DEBUG명령 직전에 트랩을 실행하므로 tput sgr0모든 명령 전에 (형식 재설정 속성)이 실행됩니다.

이는 [[ -t 1 ]]STDOUT이 실제로 터미널인지 확인하기 위한 안전 검사입니다. 어떤 경우에는 bash의 STDOUT이 터미널(파이프, 원격 SSH 등)에 연결되지 않을 수 있으므로 tput터미널 이스케이프 코드를 보내고 싶지 않을 수 있습니다 .

관련 정보