명령 및 출력에 대한 다른 색상


13

리눅스에서 명령의 출력 색상을 입력하는 명령 줄의 색상과 다른 색상으로 변경할 수 있는지 궁금합니다. 단조롭고 출력이 시작되는 위치를 찾기가 어렵습니다. 처럼,

@USER/Destop$ ----> blue
/*
--------------
output file in white
-----------
*/

감사


2
어쩌면 precmd_functions를 사용하면 프롬프트 색상을 변경하고 preexec_functions 또는 이와 유사한 것보다 다시 설정할 수 있습니다. (zsh에서는 다른 쉘과 동등한 것이 있는지 모르겠습니다)
pataluc

방금 내 제안을 시도했지만 명령이 채색되지 않습니다 ... :(
pataluc

1
@ pataluc : 나는 성공했다 preexec () { echo -n "\\e[40;34m" }; 이 precmd기능은 IMHO가 필요하지 않습니다. zsh는 프롬프트를 표시하기 전에 색상 자체를 재설정하는 것 같습니다. 그러나 이것은 lsAaron이 지적한대로 색상 자체를 변경하지 않는 명령 (예 : is is ) 에만 작동합니다 . 와 cat, bc등 쉘 명령, 내장 (심지어 alpine)이 잘 작동합니다.
mpy

@mpy 나는 raj이 결과가 아닌 명령에 색상을 지정하고 싶다고 가정하고, var "\\e[40;34m"의 끝에 추가 하고, PROMPT흰색으로 다시 설정했다고 가정했다 preexec () { echo -n "\\e[40;37m" }.
pataluc

1
@pataluc : 죄송합니다. 이제 포인트를 얻습니다. 명령 행을 색칠하려면 zle_highlight=(default:fg=cyan)최신 zsh 버전을 사용하십시오. Zsh는 또한 fish; man zshzle의 CHARACTER HIGHLIGHTING 섹션을 참조하십시오.
mpy 2016 년

답변:


5

실제로는 아닙니다. 주어진 프로그램의 출력 색상은 터미널이 아닌 명령에 의해 제어됩니다.

즉, 터미널이 색상에 대한 ANSI 이스케이프 코드를 이해한다고 가정하면 (대부분의 경우) 이스케이프 코드를 사용하여 프롬프트 시작시 원하는 프롬프트 색상을 설정하고 끝에서 원하는 출력 색상을 설정할 수 있습니다. 이로 인해 명령 행도 출력을 위해 설정 한 색상으로 표시되지만 원하는 결과에 가깝게 접근 할 수 있습니다. 예를 들면 다음과 같습니다.

$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '

다음과 같은 프롬프트가 표시됩니다.

user@host:wd $ _

'user'와 'host'는 자주색, 'wd'(당신의 cwd)는 갈색 (진한 노란색), '$'뒤의 모든 것은 터미널이 연한 파란색으로 사용하는 모든 것입니다. (기본 xterm은 이것을 청록색으로 렌더링합니다; gnome-terminal은 기본값이 약간 좋은 수레 국화 파랑으로 보입니다.)

bash에 필요한 형식으로 지정된 실제 색상 코드 는 다음 \[\033[00;35m\]과 같습니다. 여기서 00;35실제 색상 사양은 다음과 같습니다. 선행은 00거의 변경되지 않지만 IIRC 굵은 체 (01), 밑줄 (??) 및 반전 비디오 (??) 효과를 생성 할 수 있지만 후행 '35'는 실제 색상이며이 경우 자주색입니다.

놀랍게도 ANSI 색상 코드 목록을 찾기는 어렵지만 다음과 같이 전경색은 30에서 37까지, 배경색은 40에서 47까지입니다.

color        fg  bg
black        30  40
red          31  41
green        32  42
yellow       33  43
blue         34  44
purple       35  45
cyan         36  46
gray/white   37  47

프롬프트를 따르는 모든 항목에 기본 색상을 설정하기 때문에 이스케이프 코드를 통해 고유 한 색상을 설정하지 않은 프로그램은 해당 색상을 사용합니다 (예 : 호출기에서는 다른 명령에 대해 설정 한 것과 동일한 색상으로 출력물을 볼 수 있습니다. 한편, 명령 않는 이스케이프 코드를 통해 자신의 색상을 설정 완전히 노력을 무시합니다.


1
이스케이프 코드 대신 tput컬러링에 사용하는 것이 훨씬 더 읽기 쉽다는 것을 알았습니다. 예를 들어, 내 프롬프트 (bash)는 export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "시간을 출력 한 다음 사용자 이름을 한 가지 색상으로, @다른 이름으로 다른 이름으로, 호스트 이름을 세 번째로 (빨간색, 흰색 및 파란색으로) 출력 한 다음 PWD 및를 인쇄합니다 $ . 히스토리를 다시 스크롤 할 때 프롬프트 라인이 어디에 있는지 한 눈에 쉽게 볼 수 있습니다.
MattDMo

굉장해 ... 그게 내가 원했던 전부 야. 색상을 변경하려는 경우 어떤 값을 변경해야하는지 알려 주실 수 있습니까?
raj

마지막 색상을 이전과 동일하게 유지하는 방법이 있습니까?
raj

그리고 왜 변경 사항이 반영되지 않습니까? 로그인 할 때마다 다시 색칠해야합니다
raj

1
쉘의 초기화 파일에 bash를 추가하지 않으면 변경 사항이 영구적이지 않습니다 ~/.bashrc. 프롬프트 문자열 인 PS1을 설정하는 행을 찾아 답변에 설명 된대로 수정하십시오. 변경 사항은 프롬프트 문자열 설정 방법에 따라 다르지만 대부분의 두드러진 세부 사항은 내 대답에 있으며 나머지는 약간의 인터넷 검색을 통해 찾을 수 있습니다. "마지막 색상을 이전과 동일하게 유지하는 방법이 있습니까?"
Aaron Miller

7

채색을 수행하는 프로그램으로 출력을 전달할 수 있습니다. 예를 들어 다음과 같은 프로그램이 있습니다 pycolor.

pycolor module.py

자신을 구축하려면 :

red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"

컬러 출력에 대한 추가 정보.


3

예, 리눅스와 맥 OS에서 적어도 bash에서 작동합니다.

먼저 일부 속성 변수를 설정하고 PS1 프롬프트에서 터미널을 원하는 명령 줄 속성으로 설정합니다.

bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"

그런 다음 모든 명령 바로 전에 실행되는 bash DEBUG 트랩을 사용하여 명령 출력의 텍스트 속성을 변경하십시오.

trap 'echo -ne "${none}"' DEBUG

1

명령에 의한 명령에 대한 또 다른 대안은 grc-일반 컬러 라이저입니다. 색상을 지정하는 데 사용하는 정규식을 설정하려면 약간의 작업이 필요합니다. 나는 여기에 대해 알았습니다.

/unix/8414/how-to-have-tail-f-show-colored-output?newsletter=1&nlcode=17737|321c

그리고 여기:

/unix/26313/colored-find-output

나는 정규 표현식을 사용하는 플래시가 아니므 로이 명령으로 많은 일을하지 않았습니다.


나는 이것을 모든 테일 로그 스크립트와 함께 사용합니다. 기이.
stefgosselin 2016 년

1

이것을 .bashrc 파일에 버리고 저장 후 파일을 소싱하십시오.

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color

이 작업이 완료되면 터미널에서 이러한 변수 중 하나를 영구적으로 사용하거나 변수를 주석 처리하거나 완전히 삭제할 때까지 사용할 수 있습니다. 컴퓨터의 스크립트 나 명령 대체 또는 무엇이든 사용할 수 있습니다. 다음은 개인적으로 사용하는 방법에 대한 다음 예입니다.

echo -e "${red}This text is red.${rst}"
printf "${grn}This text is green.\n${rst"

나는 보통 이것들을 개별 echo및 / 또는 printf명령 과 함께 사용 하지만 명령과 같은 다른 명령을 채색하는 데 사용할 수 있습니다 ping. .bashrc효과를 얻으려면 다음을 추가하십시오 . 그런 다음 .bashrc파일을 소싱 하고 자주색 텍스트와 함께 cping사용할 명령을 실행하십시오 ping. 터미널이 지원하는 모든 색상을 사용하도록 각 명령 기능을 설정할 수 있습니다.

# Add this to your .bashrc file
colored_ping() {

    echo -e "${pur}$(ping $1)${rst}"
}

alias cping='colored_ping'

그런 다음 시도하십시오.

user@linux:~# cping superuser.com

에 대한 출력 cping은 자주색입니다. 동일한 출력에서 ​​여러 색상을 사용하려는 경우 고유 한 방식으로 추가 할 수 있습니다. 당신이 그것을하는 방법은 전적으로 당신에게 달려 있습니다. 예를 들면 다음과 같습니다.

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}

0

git hub :
github : git clone http://github.com/mbornet-hl/hl

http://www.flashnux.com/notes/page_000022_US.html
hl 에서 사용할 수있는 hl 명령을 살펴보십시오 . C로 작성된 리눅스 명령으로, 특히 텍스트 파일이나 명령의 출력을 채색하도록 설계되었습니다. 최대 42 개의 색상을 동시에 사용할 수 있으며 구성 파일을 사용하여 명령 줄을 단순화 할 수 있습니다. 다른 명령으로 파이프 될 수있는 모든 명령의 출력을 채색 할 수 있습니다. 정규식이 무엇인지 아는 경우 사용하기가 매우 쉽습니다. 매뉴얼 페이지를 사용하여 사용법을 이해할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.