터미널을 사용하는데, 명령을 작성할 때 특정 색상을 사용하고 싶습니다.
예를 들어 명령줄에 "history"라고 썼다고 가정해 보겠습니다. 키보드에서 입력한 명령을 미리 정의된 색상을 사용하여 색상화하고 싶습니다.
요약하자면, 사용자가 입력한 모든 명령은 동일한 색상으로 표시됩니다.
그러므로
history
grep -hir -C 8 "hello world" .
파란색으로 표시됩니다.
현재 PS1에는 다음이 있습니다.
PS1='\n\[\033[01;36m\]\u@\h:'
PS1=$PS1'\n+ \[\033[38;5;214m\]\w\[\033[00m\]\n'
그런 다음 나는 다음을 수행했습니다.
OPS0="$PS0" OPS1="$PS1"
t7="$(tput setaf 7)" t5="$(tput setaf 5)"
[[ -n "$PS1" ]] && PS0="\[$t7\]" PS1="\[$t7\]$PS1\[$t5\]"
01cuneus 직전, 처음에 이상한 캐릭터 두 명을 봤습니다.
pete@home:~$ ls
01cuneus Admir Documents logs Public
02chaos conjgrad.f90~ Downloads Music temp
03marshl Desktop fontconfig Pictures Videos
답변1
문서를 읽으면 bash
프롬프트와 관련된 변수에 대한 섹션으로 연결됩니다. 우리는 이것들에 관심이 있습니다
PS0
대화형 쉘은 명령을 읽은 후 명령을 실행하기 전에 이 매개변수의 값을 확장하고 표시합니다.PS1
이 매개변수의 값은 확장되어 기본 프롬프트 문자열로 사용됩니다.
두 변수 모두 PROMPTING의 이후 섹션을 참조합니다. 여기서 이 두 태그는 프롬프트 문자열에 사용될 수 있습니다.
\[
터미널 제어 시퀀스를 프롬프트에 포함하는 데 사용할 수 있는 비인쇄 문자 시퀀스를 시작합니다.\]
인쇄되지 않는 문자의 끝 시퀀스
마지막으로 색상에 대한 다음 섹션이 포함된 tput
명령 참조terminfo
setab
배경색을 #1로 설정하고 ANSI 이스케이프를 사용합니다.setaf
ANSI 이스케이프를 사용하여 전경색을 #1로 설정합니다.
그리고
setaf
/[...] 함수는setab
각각 숫자 인수를 사용합니다.setaf
/ 매개변수 값 0~7은setab
다음과 같이 이식 가능하게 정의됩니다. [...]Color #define Value RGB black COLOR_BLACK 0 0, 0, 0 red COLOR_RED 1 max,0,0 green COLOR_GREEN 2 0,max,0 yellow COLOR_YELLOW 3 max,max,0 blue COLOR_BLUE 4 0,0,max magenta COLOR_MAGENTA 5 max,0,max cyan COLOR_CYAN 6 0,max,max white COLOR_WHITE 7 max,max,max
이 모든 것을 종합하면 명령 입력의 색상이 변경되지만 명령이 실행되기 전에 복원되도록 기존 PS1
및 변수를 수정할 수 있습니다.PS0
OPS0="$PS0" OPS1="$PS1" # Save originals
t7="$(tput setaf 7)" t6="$(tput setaf 6)" # White, Cyan
[[ -n "$PS1" ]] && PS0="\[$t7\]" PS1="\[$t7\]$PS1\[$t6\]" # After and before command entry
표시된 내용이 마음에 들지 않으면 값을 복원할 수 있습니다(또는 새 셸을 시작하면 됩니다).
PS0="$OPS0" PS1="$OPS1"
준비가 되면 레퍼토리에 대사를 추가하여 .bashrc
영구적인 흥미를 느껴보세요.