Как установить переменную с цветом и выровнять по левому краю bash - PullRequest
0 голосов
/ 01 апреля 2020

Как установить переменную с цветом и выравниванием по левому краю с bash

Пример:

red=$(tput setaf 1)
green=$(tput setaf 2)
normal=$(tput sgr0)


if [ $process_state != "running" ]; then
    process_state=${red}$process_state${normal}
else
    process_state=${green}$process_state${normal}
fi

printf "%-10s|" $process_state

Входы

process_state=running
process_state=stopped

Выход

running   | <-- Where this is in green
stopped   | <-- Where this is in red

Решение:

red=$(tput setaf 1)
green=$(tput setaf 2)
normal=$(tput sgr0)


if [ $process_state != "running" ]; then
    process_state="${red} $process_state ${normal}"
else
    process_state="${green} $process_state ${normal}"
fi

printf "%s%-10s%s|" $process_state

Примечание: обратите внимание на пробелы вокруг $ process_state, отделяющие его от цвета.

1 Ответ

2 голосов
/ 01 апреля 2020

Будет проблема с вычислением ширины поля так, как вы это делаете, потому что $red и $green не имеют нулевой ширины для printf.

Я бы перекодировал следующим образом:

red=$(tput setaf 1)
green=$(tput setaf 2)
normal=$(tput sgr0)

if [ "$process_state" != "running" ]; then
    printf "%s%-10s%s|" "$red" "$process_state" "$normal"
else
    printf "%s%-10s%s|" "$green" "$process_state" "$normal"
fi
...