출력이 아닌 입력 텍스트의 색상 변경 [중복]

출력이 아닌 입력 텍스트의 색상 변경 [중복]

입력된 명령이 시각적으로 "눈에 띄는" 터미널의 스크린샷을 캡처해야 합니다. 지금은 이것을 사용하여 "red"를 입력하는 명령을 만들고 있습니다.

PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;34m\]\$ \[\e[m\]\[\e[0;31m\]'

문제는 내가 입력한 텍스트뿐만 아니라 프롬프트 뒤의 모든 내용이 빨간색이라는 것입니다.

레드 리눅스 출력

이 문제를 어떻게 해결할 수 있나요?

저는 bash(CentOS 7)를 사용하고 있습니다.

답변1

이를 달성하기 위해 트랩을 사용할 수 있습니다. trap 'echo -ne "\e[0m"' DEBUG

DEBUGbash man에 따르면: 실행 트랩

모든 단순 명령 전, for 명령, case 명령, select 명령, 명령의 모든 산술 연산 전, 쉘 함수에서 첫 번째 명령을 실행하기 전

따라서 명령이 실행될 때마다 셸은 \e[0m비활성화된 이전 색상 코드를 삽입합니다. 명령을 실행한 후에 프롬프트를 통해서만 재설정하십시오.

여기에서 허용되는 해킹을 찾았습니다.https://wiki.archlinux.org/index.php/Color_Bash_Prompt#Different_colors_for_text_entry_and_console_output

답변2

PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;34m\]\$ \[\e[m\]\[\e[1;31m\]'

아래 예는 출력 색상을 변경하여 이 문제를 해결할 수 있습니다.

PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;34m\]\$ \[\e[m\]\[\e[1;32m\]'

위 명령은 다음 출력을 녹색으로 표시합니다.

관련 정보