2015-04-21 4 views
1

У меня есть сценарий bash с включенным командным эхом (set -x). Я хочу, чтобы строки эха были напечатаны зеленым текстом, но вывод фактических команд должен быть в любом цвете по умолчанию. Я могу использовать $ PS4, чтобы получить зеленый цвет, но я не вижу способа включить его после каждого эха, поэтому результат состоит в том, что весь вывод становится зеленым.Как сделать команды эхо-команды bash зелеными

+1

Вместо того, чтобы использовать управляющие символы ANSI, вы можете проверить, ваш эмулятор терминала может автоматически выделять строки, соответствующие определенному регулярному выражению (и устанавливать 'PS4' так, чтобы желаемые строки могли быть однозначно сопоставлены.) – chepner

+0

что вы имеете в виду линии для печати? –

+0

@JID, когда вы ставите 'set -x' в скрипт, bash выводит на терминал каждую команду до ее выполнения. Кроме того, различные команды могут иметь некоторый вывод, который они также распечатывают на терминал. Я хочу различать два цвета. – Ari

ответ

3

Попробуйте это:

#!/bin/bash 
exec 3<> >(sed -e "s/.*/\o033[0;32m&\o033[0m/") 
BASH_XTRACEFD=3 
set -x 
... 

(требует BASH 4.1, я считаю, использовать AWK или перл или Баш встроенных команд вместо СЭД, если вы предпочитаете)

+0

Блестящий! (Хотя я закончил использование sed, а не perl.) – Ari

+0

@Ari: как это выглядело с sed? – ysth

+0

'exec 3 <>> (sed -e" s /.*/ \ o033 [0; 32m & \ o033 [0m/")' – Ari

Смежные вопросы