Различный цвет для команды и вывода


13

Мне было интересно, если можно изменить цвет вывода команды в Linux на цвет, отличный от цвета командной строки, где я набираю. Это немного однообразно и трудно найти, где начинается вывод. нравиться,

@USER/Destop$ ----> blue
/*
--------------
output file in white
-----------
*/

Благодарность


2
возможно, используя precmd_functions, вы можете изменить цвет приглашения и вернуть его до preexec_functions, или что-то в этом роде. (в zsh я не знаю, есть ли эквивалент для других оболочек)
pataluc

Я только что попробовал мое предложение, но я не получил команду цветным ... :(
pataluc

1
@pataluc: мне это удалось preexec () { echo -n "\\e[40;34m" }; precmdфункция ИМХО не надо, кажется ЗШ перезагружается сам по себе цвет перед отображением подсказки. Но это работает только для тех команд, которые не изменят сам цвет (яркий пример ls), как указал Аарон. С cat, bc, встроенные оболочки команд и т.д. (даже alpine) это работает отлично.
mpy

@mpy Я также преуспел со всеми командами, предполагая, что Радж хочет раскрасить команду, а не результат, я добавил "\\e[40;34m"ее в конец своей PROMPTpreexec () { echo -n "\\e[40;37m" }
переменной

1
@pataluc: Извините, теперь я понял. Чтобы раскрасить командную строку, просто используйте zle_highlight=(default:fg=cyan)последнюю версию zsh. Zsh также предлагает динамическую окраску, как fish; см. раздел ВЫДЕЛЕНИЕ ХАРАКТЕРА в man zshzle.
mpy

Ответы:


5

На самом деле, нет; Цвет вывода данной программы контролируется командой, а не терминалом.

Тем не менее, предполагая, что ваш терминал понимает управляющие коды ANSI для цвета (большинство делают), вы можете использовать управляющие коды, чтобы установить желаемый цвет подсказки в начале подсказки и желаемый выходной цвет в конце; это приведет к тому, что ваши командные строки также будут в том цвете, который вы установили для вывода, но это, вероятно, примерно так же близко, как вы собираетесь получить то, что вы ищете. Например, следующее:

$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '

даст вам приглашение, которое выглядит так:

user@host:wd $ _

с 'user' и 'host' в фиолетовом, 'wd' (ваш cwd) в коричневом (темно-желтый) и всем, что после вашего терминала использует светло-синий, после '$'. (Значение по умолчанию для xterm будет отображаться синим цветом; gnome-терминал по умолчанию выглядит довольно красивым оттенком василькового.)

Фактический код цвета, указанный в необходимом формате для bash, например \[\033[00;35m\], где 00;35- фактическая спецификация цвета; ведущий 00редко изменяется, но может создавать эффекты полужирного (01), подчеркивания (??) и обратного видео (??) в IIRC, в то время как конечный «35» является фактическим цветом, который в данном случае является фиолетовым.

Удивительно трудно найти достойный список цветовых кодов ANSI, но цвета переднего плана выполняются с 30 по 37, а цвета фона с 40 по 47, следующим образом:

color        fg  bg
black        30  40
red          31  41
green        32  42
yellow       33  43
blue         34  44
purple       35  45
cyan         36  46
gray/white   37  47

Имейте в виду, что, поскольку вы устанавливаете цвет по умолчанию для всего, что следует за вашим приглашением, программы, которые вы запускаете и которые не устанавливают свои собственные цвета с помощью escape-кодов, получат этот цвет - например, если вы запустите пейджер, вы, вероятно, увидите его вывод в том же цвете, который вы установили для других команд. В то же время, команды , которые действительно устанавливают свои собственные цвета с помощью эвакуационных кодов будет игнорировать ваши усилия полностью.


1
Вместо escape-кодов я обнаружил, что использование tputдля раскрашивания намного удобнее для чтения. Например, мой запрос (в bash) export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "выводит время, затем имя пользователя в одном цвете, @в другом и имя хоста в третьем (красный, белый и синий в данный момент), а затем печатает PWD и $ . Очень легко сразу увидеть, где находятся строки подсказок при прокрутке истории.
MattDMo

ты потрясающий ... это все, что я когда-либо хотел. Спасибо, не могли бы вы сказать, какие значения нужно изменить, если я когда-нибудь захочу изменить цвета?
Радж

и есть ли способ сохранить последний цвет прежним?
Радж

и почему изменение не является постоянным, каждый раз, когда я вхожу в систему, мне приходится красить его снова
Радж

1
Изменение не является постоянным, если вы не добавите его в файл инициализации вашей оболочки, что для bash является ~/.bashrc; найдите строку, в которой он устанавливает PS1, которая является вашей строкой приглашения, и измените ее, как описано в ответе. Что изменить, зависит от того, как настроена ваша строка приглашения, но большинство существенных деталей в моем ответе, а остальное можно найти, немного погуглив. Я не уверен, что вы подразумеваете под "есть ли способ сохранить последний такой же, как у цвета раньше?"
Аарон Миллер

7

Вы можете передать вывод программе, которая выполняет раскраску. Например, есть такие программы, как pycolor:

pycolor module.py

Чтобы построить свой собственный:

red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"

Подробнее о выводе цвета.


3

Да, у меня это работает для Bash, по крайней мере на Linux и Mac OS.

Сначала установите некоторые переменные атрибута, и PS1 предложит оставить терминал установленным с требуемыми атрибутами командной строки, например:

bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"

Затем используйте ловушку bash DEBUG, которая выполняется перед каждой командой, чтобы изменить текстовые атрибуты для вывода команды:

trap 'echo -ne "${none}"' DEBUG

1

Другой альтернативой (по командам на основе команд) является grc - универсальный colorizer. Требуется немного поработать, чтобы настроить регулярные выражения, которые используются для раскрашивания. Я узнал об этом здесь:

/unix/8414/how-to-have-tail-f-show-colored-output?newsletter=1&nlcode=17737|321c

и тут:

/unix/26313/colored-find-output

Я не флеш с регулярными выражениями, поэтому я мало работал с этими командами.


Я использую это со всеми моими скриптами хвостового журнала. Изумительный.
stefgosselin

1

Добавьте их в файл .bashrc, а затем сохраните файл после сохранения.

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color

Как только это будет сделано, вы можете использовать любой из них в своем терминале постоянно или пока вы не закомментируете переменные или не удалите их полностью. Вы можете использовать их в сценариях на вашем компьютере или с подстановкой команд или как угодно. Вот следующий пример того, как я использую их лично:

echo -e "${red}This text is red.${rst}"
printf "${grn}This text is green.\n${rst"

Я обычно использую их с отдельными командами echoи / или printfкомандами, но вы можете использовать их для раскрашивания других команд, таких как pingкоманда. Добавьте следующее, .bashrcчтобы получить эффекты. Затем создайте .bashrcфайл и введите cpingкоманду для использования pingс фиолетовым текстом. Вы можете настроить каждую командную функцию на использование любого цвета, поддерживаемого вашим терминалом.

# Add this to your .bashrc file
colored_ping() {

    echo -e "${pur}$(ping $1)${rst}"
}

alias cping='colored_ping'

Тогда попробуйте:

user@linux:~# cping superuser.com

Ваш вывод cpingбудет фиолетовым. Если вы хотите использовать несколько цветов в одном выводе, вы можете добавить их уникальными способами. Как вы это делаете, полностью зависит от вас. Например:

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}

0

Вы должны взглянуть на команду hl, доступную на git hub:
github: git clone http://github.com/mbornet-hl/hl
и на:
http://www.flashnux.com/notes/page_000022_US.html
hl это команда linux, написанная на C, специально разработанная для окрашивания текстового файла или вывода команды. Вы можете использовать до 42 цветов одновременно и использовать файл конфигурации для упрощения командной строки. Вы можете раскрасить вывод каждой команды, которая может быть передана другой. И если вы знаете, что такое регулярные выражения, вам будет очень легко пользоваться. Вы можете использовать справочную страницу, чтобы понять, как ее использовать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.