Если вы хотите включить это глобально, вам понадобится терминальная функция, а не процесс, в который вы перенаправляете вывод, потому что конвейер может помешать какой-либо команде (две проблемы состоят в том, что stdout и stderr будут появляться вне -порядок и буферизация, и что некоторые команды просто ведут себя по-разному при выводе на терминал).
Я не знаю ни одного «обычного» терминала с этой функцией. Это легко сделать в Emacs, в буфере term
: настроить font-lock-keywords
для term-mode
.
Однако вы должны тщательно подумать, действительно ли вы хотите эту функцию все время. Что если команда имеет свои собственные цвета (например, grep --color
, ls --color
)? Возможно, было бы лучше определить короткий псевдоним для команды colorizer и запустить myCommand 2>&1|c
, если вы хотите раскрасить вывод myCommand
. Вы также можете псевдоним некоторых конкретных команд всегда цвета .
Обратите внимание, что возвращаемое состояние конвейера - это его команда last , поэтому, если вы запустите myCommand | c
, вы получите статус c
, а не myCommand
. Вот оболочка bash, которая позволяет избежать этой проблемы, которую вы можете использовать как w myCommand
:
w () {
"$@" | c
return $PIPESTATUS[0]
}