#bash #syntax-highlighting
#bash #подсветка синтаксиса
Вопрос:
Я хочу, чтобы каждая команда в my .sh была напечатана жирным шрифтом, но выходные данные, генерируемые командами, не были выделены жирным шрифтом.
(Чтобы я мог четко видеть, что делает скрипт — вывода много).
Testcase:
> cat foo.sh
#!/bin/bash
set -x
echo foo
> ./foo.sh
echo foo
foo
(Я хочу echo foo
выделенный жирным шрифтом и foo
обычный, без указания escape-последовательностей вручную, что было бы некрасиво со многими командами).
Я знаю, как выводить жирный текст с помощью echo
или printf
с помощью управляющих последовательностей терминала; но как я могу повлиять set -x
на форматирование вывода?
Комментарии:
1. Что вы искали и что вы нашли? Что вы пробовали и как это не удалось?
2.Прочитайте о
PS2
PS3
PS4
переменных в руководстве по bash, а затем соедините их с дубликатом. Тем не менее, я не верю, что можно сбросить флаги обратно, посколькуPS4
они печатаются только в начале.
Ответ №1:
Самым простым было бы проанализировать вывод по мере его поступления.
$ ./foo.sh 2> >(sed "/ .*/s//$(tput bold)amp;$(tput sr0)/")
Вы могли бы установить PS4
значение contain tput bold
, но после печати нет команды, которая должна выполняться set -x
, поэтому нет способа вернуть поведение к нормальному.
Ответ №2:
В конце я решил применить полужирный шрифт для каждой команды:
BOLD='33[1m'
RESET='33[0m'
bold() {
printf '${BOLD}%s${RESET}n' "$*"
"$@"
}
bold ls
Также { tput bold; printf '%sn' "$*"; tput sgr0; "$@"; }
работает.