나는 몇 가지 답변을 보았지만 그들은 모두 이것에 대해 이야기합니다 echo
. Bash에서 명령 출력의 색상을 변경하는 방법은 무엇입니까? 예를 들어, hostname
명령의 출력을 색상화 하고 싶습니다 .
$ hostname
Nameofcomputer <--- Just the output to be colored and then it returns to default color of the shell.
답변1
제안해 주신 @finefoot 덕분에 이 코드가 작동하는 것 같습니다.
#!/bin/bash
case $1 in
red) col=$'\e[1;31m' ;;
green) col=$'\e[1;32m' ;;
yellow) col=$'\e[1;33m' ;;
blue) col=$'\e[1;34m' ;;
magenta) col=$'\e[1;35m' ;;
cyan) col=$'\e[1;36m' ;;
esac
printf "%s" "${col}"
shift
exec "$@"
용법
그것이 호출된다고 가정하고 set-color
, 그것을 호출하는 데 사용하십시오 set-color red hostname
.
설명하다
- Jasonwryan의 답변에 따르면 케이스 블록은 색상을 정의합니다.여기.
- 이 스크립트는 이 색상을 설정하는 데 사용됩니다
printf
. shift
스크립트에 입력된 첫 번째 옵션(예: 색상)을 제거합니다.exec "$@"
그런 다음 나머지 스크립트를 실행합니다.
답변2
이미 이 작업을 수행할 수 있는 프로그램이 있습니다. 예를 들어 grc
다음은 하나입니다.
로그 파일, 명령 출력, 임의 텍스트 색상을 지정하는 데 사용할 수 있는 범용 셰이더입니다. 정규식을 통해 구성할 수 있습니다.
[저는 보통 텍스트 이미지를 사용하는 것을 좋아하지 않지만 StackExchange에 색상 서식 옵션이 없는 것 같습니다.]
아니면 있다source-highlight
.
바라보다명령 출력을 가져와 미리 정의된 구성표에 따라 색상을 지정할 수 있는 셰이더 유틸리티가 있습니까?슈퍼유저도 사용 가능
답변3
tput setaf 1; hostname; tput sgr0
tput
터미널 데이터베이스의 해당 기능을 쿼리합니다. 여기는setaf
ANSI 색상 1 설정(빨간색), sgr0
에렌더링할 그래픽 선택 없음기본 속성을 반환합니다. 그 외에도 (원본 쌍)을 사용하여 배경색과 전경색만 재설정하고 다른 그래픽 속성(굵게, 밑줄, 강조 표시, 반전...)은 그대로 둘 tput sgr0
수 있습니다 .tput op
zsh
, tcsh
또는 와 같은 일부 셸에는 fish
데이터베이스 쿼리 또는 색상 이름을 ANSI 코드에 매핑하는 기능이 내장되어 있습니다(예: zsh
또는fish
), 하지만 bash
.
에서는 zsh
프롬프트 확장을 사용하여 다음의 호스트 이름을 인쇄합니다 red
.
print -P '%F{red}%m%f'
( %f
전경색만 재설정)
tcsh
내장 기능 이나 내장 기능 zsh
이 있는 terminfo echotc
대신 termcap 코드를 사용하십시오 .
echotc AF 1; hostname; echotc me
(최신 버전과 같은 terminfo 코드 setab/sgr0의 경우 zsh
)echoti
tput
에서는 매개변수 확장 플래그 zsh
가 %
매개변수 확장 시 프롬프트 확장을 켜므로 다음을 수행할 수 있습니다.
red=%F{red} normal=%f
echo ${(%)red}whatever%{(%)normal}
에서는 어시스턴트가 콘텐츠를 컬러로 작성하도록 실행할 수 있는 자동 로드 가능 기능 zsh
도 찾을 수 있습니다 .colors
autoload colors; colors
echo $fg[red]whatever$fg[default]