Как изменить цвет вывода эха в Linux - PullRequest
1458 голосов
/ 10 мая 2011

Я пытаюсь напечатать текст в терминале с помощью команды echo.

Я хочу напечатать текст красным цветом.Как я могу это сделать?

Ответы [ 24 ]

0 голосов
/ 25 июня 2014
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"

Этот ответ правильный, за исключением того, что призыв к цветам не должен быть внутри кавычек.

echo -e ${red}"Hello Stackoverflow"${NC}

Должен сделать свое дело.

0 голосов
/ 13 июня 2018

Вот самое простое и читаемое решение.С bashj (https://sourceforge.net/projects/bashj/), вы бы просто выбрали одну из следующих строк:

#!/usr/bin/bash

W="Hello world!"
echo $W

R=130
G=60
B=190

echo u.colored($R,$G,$B,$W)

echo u.colored(255,127,0,$W)
echo u.red($W)
echo u.bold($W)
echo u.italic($W)

Y=u.yellow($W)
echo $Y
echo u.bold($Y)

256x256x256 цвета доступны, если у вас есть поддержка цвета в вашем терминальном приложении.

0 голосов
/ 17 марта 2015

Вот простой маленький скрипт, который я недавно написал, который раскрасит любой ввод по каналу вместо использования "Туалет".

File: color.bsh

#!/usr/bin/env bash 

## A.M.Danischewski 2015+(c) Free - for (all (uses and 
## modifications)) - except you must keep this notice intact. 

declare INPUT_TXT=""
declare    ADD_LF="\n" 
declare -i DONE=0
declare -r COLOR_NUMBER="${1:-247}"
declare -r ASCII_FG="\\033[38;05;"
declare -r COLOR_OUT="${ASCII_FG}${COLOR_NUMBER}m"

function show_colors() { 
   ## perhaps will add bg 48 to first loop eventually 
 for fgbg in 38; do for color in {0..256} ; do 
 echo -en "\\033[${fgbg};5;${color}m ${color}\t\\033[0m"; 
 (($((${color}+1))%10==0)) && echo; done; echo; done
} 

if [[ ! $# -eq 1 || ${1} =~ ^-. ]]; then 
  show_colors 
  echo " Usage: ${0##*/} <color fg>" 
  echo "  E.g. echo \"Hello world!\" | figlet | ${0##*/} 54" 
else  
 while IFS= read -r PIPED_INPUT || { DONE=1; ADD_LF=""; }; do 
  PIPED_INPUT=$(sed 's#\\#\\\\#g' <<< "${PIPED_INPUT}")
  INPUT_TXT="${INPUT_TXT}${PIPED_INPUT}${ADD_LF}"
  ((${DONE})) && break; 
 done
 echo -en "${COLOR_OUT}${INPUT_TXT}\\033[00m"
fi 

Затем назовите его красным цветом (196):
$> echo "text you want colored red" | color.bsh 196

0 голосов
/ 30 апреля 2015

Подобно тому, как что-то немного, проходя через grep, оно будет выделено красным (но только красным). Вы также можете использовать именованные каналы, чтобы ваша строка была ближе к концу строки:

 grep '.*' --color=always <(echo "foobar")
...