Bash команда сохраняет цвет при прокладке трубопровода
Возможный дубликат:
Можно ли распечатать выделенный файл с помощью перенаправления оболочки?
Настройка
В этом случае я специально пытаюсь сохранить цвета в git status -s
, когда переадресую его в другую команду.
Некоторые команды git, diff
, например, и другие команды, такие как grep
, имеют опцию --color=always
, но git status
нет.
Вопрос
Есть ли способ передать или захватить вывод команды и заставить ее думать, что она выводит на оболочку xterm, поэтому она не отключает автоматически цвета?
Ответы
Ответ 1
Вот фрагмент script
, использующий раскрашенный вывод ls
в качестве примера (в Mac OS X 10.6).
# no colored ls output if stdout is a pipe (and not a tty)
ls -G /
ls -G / | cat
script -q /dev/null ls -G / | tr -d '\r' | cat
# write output of script command to a variable
var="$(script -q /dev/null ls -G / | tr -d '\r' | cat)"
echo "$var"
Ответ 2
Большинство команд, которые распечатывают эти цветовые коды, явно проверяют, является ли stdout/stderr tty (с помощью функции isatty
).
Если вы хотите сохранить цветовые коды, вы можете запустить его в эмуляторе терминала, например, screen
или в прямом журнале script
, сохраняя вывод в файл.