특정 색상으로 명령 작성

특정 색상으로 명령 작성

터미널을 사용하는데, 명령을 작성할 때 특정 색상을 사용하고 싶습니다.

예를 들어 명령줄에 "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 이스케이프를 사용합니다.
  • setafANSI 이스케이프를 사용하여 전경색을 #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영구적인 흥미를 느껴보세요.

관련 정보