저는 실제 셸 명령이 다른 색상으로 표시되는 사용자 정의 PS1 색상을 사용하여 입력한 명령을 빠르게 확인하고 명령 출력 자체와 구분할 수 있습니다.
PS1의 명령 프롬프트 색상이 "파란색"으로 설정되어 있고 내 셸의 기본 색상이 흰색이라고 가정해 보겠습니다.
- ls와 같은 명령을 입력합니다. (ls -l은 파란색입니다.)
- 생성된 출력, 첫 번째 줄은 여전히 파란색입니다.
- 나머지 선은 모두 흰색입니다.
내가 원하는 것은 명령 이후의 모든 출력이 "흰색"이 되는 것입니다.
다른 예시:
- "cat"이라는 명령을 입력했는데 색상이 파란색입니다.
- 출력이 나오고 전체 출력이 파란색입니다.
"파란색"으로 입력하는 명령 프롬프트를 유지하면서 출력을 "흰색"으로 만들고 싶습니다.
일부 명령에서는 괜찮지만, 다른 명령에서는 동일한 색상이 출력의 첫 번째 줄에 넘치고 기본 색상이 시작되고, 다른 명령에서는 전체 출력(예: cat)이 동일한 색상을 갖습니다.
입력한 명령만 한 가지 색상으로 유지하고 나머지는 기본 색상으로 유지하는 방법이 있나요?
저는 OSX를 사용하고 있습니다.
편집 #1
내가 찾고 있는 것을 보여주는 댓글에 링크된 @derobert 스크린샷은 다음과 같습니다.
답변1
기본적으로 bash가 명령을 실행하기 전에 터미널 색상을 재설정하려고 합니다. 이건 통과할 수 있습니다 trap
.
예를 들어:
trap '[[ -t 1 ]] && tput sgr0' DEBUG
Bash는 DEBUG
명령 직전에 트랩을 실행하므로 tput sgr0
모든 명령 전에 (형식 재설정 속성)이 실행됩니다.
이는 [[ -t 1 ]]
STDOUT이 실제로 터미널인지 확인하기 위한 안전 검사입니다. 어떤 경우에는 bash의 STDOUT이 터미널(파이프, 원격 SSH 등)에 연결되지 않을 수 있으므로 tput
터미널 이스케이프 코드를 보내고 싶지 않을 수 있습니다 .