2013-09-01 3 views
2

Я видел, как кто-то может сделать вывод в оболочке bash цветным. Не только выделить ошибку или предупреждение, но и каталог при выполнении 'ls'.как сделать bash оболочку отображать красочный текст?

Кто-нибудь может сказать мне, как это сделать? Большое спасибо.

+1

Проверьте эту ссылку: http://stackoverflow.com/questions/2437976/get-color-output-in-bash – user000001

ответ

0

Эти вещи были со времен DOS. Использование ANSI Управляющие последовательности или коды:

http://wiki.bash-hackers.org/scripting/terminalcodes

http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html

http://ascii-table.com/ansi-escape-sequences.php

Пример использования:

Это будет печатать ABC зеленым текстом:

ESCAPE=$'\e' 
echo "${ESCAPE}[0;32mABC${ESCAPE}[0m" 

Вы можете также использовать опцию -e:

echo -e "\e[0;32mABC\e[0m" 

Или PRINTF:

printf "\e[0;32mABC\e[0m\n" 

Проверьте некоторые из кодов я в основном используют в сценариях here.

2

Вы можете проверить this и this: -

Использования ANSI управляющих последовательностями, чтобы установить свойство текста, как передний план и цвета фона.

Пример: -

echo -e "\e[1;34mThis is a blue text.\e[0m" 

и

#!/bin/bash 
# tputcolors 

echo 
echo -e "$(tput bold) reg bld und tput-command-colors$(tput sgr0)" 

for i in $(seq 1 7); do 
    echo " $(tput setaf $i)Text$(tput sgr0) $(tput bold)$(tput setaf $i)Text$(tput sgr0) $(tput sgr 0 1)$(tput setaf $i)Text$(tput sgr0) \$(tput setaf $i)" 
done 

echo ' Bold   $(tput bold)' 
echo ' Underline  $(tput sgr 0 1)' 
echo ' Reset   $(tput sgr0)' 
echo 
1

В конкретном случае ls:

Если вы используете дистрибутив, почти все из которых Приходите с gnu ls, вы, вероятно, уже имеете цветной выход. Если вы этого не сделаете, попробуйте ls -C или ls --color=auto. Возможно, вам потребуется установить $LS_COLORS; см. man dircolors, чтобы сделать это легко.

Возможно, вы находитесь на Mac OS X, где используется другая версия ls. Если ваш терминал выдает цвета, вы, возможно, можете получить цветной вывод ls с ls -G, но вам снова необходимо установить $LSCOLORS. Кроме того, вам может понадобиться export CLICOLOR=1, чтобы получить терминал, чтобы показывать цвета. Для получения дополнительной информации см. this answer на сайте-компаньоне.

0

Вот немного фона, если вы заинтересованы.

Как указывали другие, терминалы реагируют на так называемые escape-последовательности. Это последовательность символов, которые вы можете отправить на терминал (запись, отображение), и вместо отображения этих символов аппаратное обеспечение терминала интерпретирует их как команды для выполнения различных действий. Это может быть что угодно: от перемещения курсора, до мигания, изменения цветов переднего плана и фона. Это то, что делает ANY терминальная программа (будь то vi, emacs, ls или bash), когда требуется вызвать определенные возможности терминала.

Проблема в том, что существует множество различных типов терминалов, которые имеют разные возможности и реагируют на различные escape-последовательности. Раньше у людей появился механизм борьбы с этим. Они придумали termcap, а затем terminfo, что является способом абстрагирования возможностей терминала. Таким образом, вы выполняете такие действия, как «перемещать курсор» или «устанавливать цвет переднего плана», а базовая библиотека извлекает правильную последовательность эвакуации из БД, поддерживаемой для разных терминалов (на основе значения переменной среды TERM и т. Д.).

Таким образом, у вас есть знаменитая библиотека проклятий. Он позволяет вам делать все это. Для таких вещей, как bash, они инкапсулировали эту функциональность в команду, которую вы можете вызвать, называемую tput. man page give you the details как его вызвать. Поэтому было бы предпочтительнее не использовать escape-последовательности напрямую. Но, скорее, вы должны пройти через tput, чтобы оставаться независимым от терминала, с которым вы работаете.

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