Пропускаемая команда для печати в цвете?

Я немного новичок в написании сценариев bash, и мне интересно, есть ли программа или встроенная команда для передачи, которая будет печатать в указанном цвете? Или для этого есть аргумент эха?

Как я мог бы сделать:

echo Hi | commandhere -arguement blue

и он напечатал бы «Привет» синим цветом?

8
задан 10 May 2012 в 16:03

2 ответа

Я использую этот старый сценарий, hilite.pl имен, взятый от сети, уже с "неизвестным автором" строка!

#!/usr/bin/perl -w
### Usage: hilite <ansi command> <target string>
### Purpose: Will read text from standard input and perform specified highlighting
### command before displaying text to standard output.
### License: GNU GPL
# unknown author 

$|=1; # don't buffer i/o
$command = "$ARGV[0]";
$target = "$ARGV[1]";
$color = "\e[" . $command . "m";
$end = "\e[0m";

while(<STDIN>) {
    s/($target)/$color$1$end/;
    print $_;
}

Затем я могу использовать его в каналах, к выводу журнала "hilite" или другим вещам, с помощью regexp/PCRE:

 echo 'hello color world!!' | hilite.pl 34 "[Hh]el[^ ]*" | hilite.pl 43 .orld | hilite.pl 32 "\scolor\s"

Это нарисует привет в синем, раскрасит зеленый и мир в желтом фоне

Вы видите список цветов с (можно развернуть выражение удара до {01.. 255}, если Вы хотите):

for i in {01..10}  {30..49} {90..110}  ; do echo $i | hilite.pl $i $i ; done
1
ответ дан 23 November 2019 в 05:27

Я наткнулся на этот вопрос/ответы, пытаясь сделать что-то похожее на OP. Я нашел несколько других полезных ресурсов и на их основе создал сценарий журнала. Публикация здесь, если это может помочь другим.

Копание в ссылках помогает понять некоторые перенаправления, которые я не буду пытаться объяснять, потому что я только начинаю понимать это сам.

Usage будет отображать раскрашенный вывод на консоль, удаляя цветовые коды из текста, поступающего в файл журнала. Он также будет включать stderr в файл журнала для любых команд, которые не работают.

Редактировать: внизу добавлено больше вариантов использования, чтобы показать, как вести журнал разными способами

#!/bin/bash
set -e
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

. $DIR/dev.conf
. $DIR/colors.cfg

filename=$(basename ${BASH_SOURCE[0]})
# remove extension
# filename=`echo $filename | grep -oP '.*?(?=\.)'`
filename=`echo $filename | awk -F\. '{print $1}'`
log=$DIR/logs/$filename-$target

if [ -f $log ]; then
  cp $log "$log.bak"
fi

exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>$log 2>&1


# log message
log(){
    local m="$@"
    echo -e "*** ${m} ***" >&3
    echo "=================================================================================" >&3
  local r="$@"
    echo "================================================================================="
    echo -e "*** $r ***" | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g"
    echo "================================================================================="
}

echo "=================================================================================" >&3
log "${Cyan}The ${Yellow}${COMPOSE_PROJECT_NAME} ${filename} ${Cyan}script has been executed${NC}"
log $(ls) #log $(<command>)

log "${Green}Apply tag to image $source with version $version${NC}"
# log $(exec docker tag $source $target 3>&2) #prints error only to console
# log $(docker tag $source $target 2>&1) #prints error to both but doesn't exit on fail
log $(docker tag $source $target 2>&1) && exit $? #prints error to both AND exits on fail
# docker tag $source $target 2>&1 | tee $log # prints gibberish to log
echo $? # prints 0 because log function was successful
log "${Purple}Push $target to acr${NC}"


Вот другие полезные ссылки:

0
ответ дан 22 August 2020 в 17:14

Другие вопросы по тегам:

Похожие вопросы: