bash цвета

bash цвета

Уже раньше писал про подсветку:
https://imbicile.pp.ru/podsvetka-sintaksisa-nano/
https://imbicile.pp.ru/ubuntu-bash/

Решил обновить статьи, и заодно подсветить все

Сделал репозиторий на git https://github.com/imbicile/shell_colors
Если не интересен принцип происходящего то можно выполнить 4 команды. И будет красиво
В процессе работы скрипта будет предложено ввести пароль на sudo. Это необходимо для установки цветовых схем для root и всех новых пользователей

wget https://raw.githubusercontent.com/imbicile/shell_colors/master/shell_color
chmod +x shell_color
./shell_color
rm shell_color

Гененрируем .nanorc для распознавания установленных подсветок синтаксиса

dpkg -S nano | grep "\.nanorc$" | awk '{print ("include " $2)}' > .nanorc
cat .nanorc
include /usr/share/nano/perl.nanorc
include /usr/share/nano/autoconf.nanorc
include /usr/share/nano/lua.nanorc
include /usr/share/nano/ruby.nanorc
include /usr/share/nano/asm.nanorc
include /usr/share/nano/po.nanorc
include /usr/share/nano/elisp.nanorc
include /usr/share/nano/groff.nanorc
include /usr/share/nano/mutt.nanorc
include /usr/share/nano/changelog.nanorc
include /usr/share/nano/nanohelp.nanorc
include /usr/share/nano/default.nanorc
include /usr/share/nano/makefile.nanorc
include /usr/share/nano/go.nanorc
include /usr/share/nano/patch.nanorc
include /usr/share/nano/rust.nanorc
include /usr/share/nano/python.nanorc
include /usr/share/nano/guile.nanorc
include /usr/share/nano/gentoo.nanorc
include /usr/share/nano/pov.nanorc
include /usr/share/nano/tcl.nanorc
include /usr/share/nano/postgresql.nanorc
include /usr/share/nano/sh.nanorc
include /usr/share/nano/awk.nanorc
include /usr/share/nano/c.nanorc
include /usr/share/nano/javascript.nanorc
include /usr/share/nano/cmake.nanorc
include /usr/share/nano/json.nanorc
include /usr/share/nano/man.nanorc
include /usr/share/nano/php.nanorc
include /usr/share/nano/nftables.nanorc
include /usr/share/nano/texinfo.nanorc
include /usr/share/nano/xml.nanorc
include /usr/share/nano/ocaml.nanorc
include /usr/share/nano/fortran.nanorc
include /usr/share/nano/nanorc.nanorc
include /usr/share/nano/java.nanorc
include /usr/share/nano/objc.nanorc
include /usr/share/nano/html.nanorc
include /usr/share/nano/mgp.nanorc
include /usr/share/nano/tex.nanorc
include /usr/share/nano/css.nanorc
include /usr/share/nano/spec.nanorc
include /usr/share/nano/debian.nanorc

Теперь есть в начале файла указан его тип, например баш #!/bin/bash. То нано будет подсвечивать синтаксис соответствующим образом
.nanorc

PS: Из наблюдений в Ubuntu 12.04.5 LTS такой метод не отработал
nano версия 2.2.6
Параметры читаются из

/etc/nanorc

Там они уже прописаны. Можно проверить все ли они на месте, или стереть и вместо написать таким же образом
В Ubuntu 16.04.3 LTS в этом же файле прописано

include "/usr/share/nano/*.nanorc"

nano версия 2.9.2
Так что фактически надобность в файле .nanorc в профиле пользователя отпадает. Данную строчку *.nanorc Ubuntu 12.04 воспринимает как ошибку.
Если после установки скрипта shell_color nano не отображает цвета. То нужно удалить .nanorc. И оперировать файлом /etc/nanorc

rm ~/.nanorc 
sudo rm /root/.nanorc
sudo rm /etc/skel/.nanorc

Вид MC
Посмотреть скины можно в папке. Сюда же можно класть найденные в интернете схемы

ls /usr/share/mc/skins/

Я использую уже имеющийся gotar.ini

nano .config/mc/ini
skin=gotar

Подсветка файлов mc в зависимости от типа
Файл подсветки устанавливается вместе с mc

Можно взять свежий с github
https://github.com/MidnightCommander/mc/blob/master/misc/filehighlight.ini

nano /etc/mc/filehighlight.ini
[executable]
    type=FILE_EXE

[directory]
    type=DIR

[device]
    type=DEVICE

[special]
    type=SPECIAL

[stalelink]
    type=STALE_LINK

[symlink]
    type=SYMLINK

[hardlink]
    type=HARDLINK

[core]
    regexp=^core\\.*\\d*$

[temp]
    extensions=~;$$$;bak;tmp
    extensions_case=false
    regexp=(^#.*|.*~$)

[archive]
    extensions=7z;Z;ace;arc;arj;ark;bz2;cab;gz;lha;lz;lz4;lzh;lzma;rar;rpm;tar;tbz;tbz2;tgz;tlz;txz;xz;zip;zoo

[doc]
    extensions=chm;css;ctl;diz;doc;docm;docx;dtd;htm;html;letter;lsm;mail;man;me;msg;nroff;odp;ods;odt;pdf;po;ppt;pptm;pptx;ps;rtf;sgml;shtml;tex;text;txt;xls;xlsm;xlsx;xml;xsd;xslt


    extensions=ada;asm;awk;bash;c;caml;cc;cgi;cpp;cxx;diff;erl;h;hh;hi;hpp;hs;inc;jasm;jav;java;js;m4;mak;ml;mli;mll;mlp;mly;pas;patch;php;phps;pl;pm;prg;py;rb;sas;sh;sl;st;tcl;tk;xq

[media]
    extensions=3gp;aac;ac3;ape;asf;avi;dts;flac;flv;it;m3u;m4a;med;mid;midi;mkv;mod;mol;mov;mp2;mp3;mp4;mpeg;mpg;mpl;ogg;ogv;s3m;umx;vob;wav;webm;wma;wmv;xm

[graph]
    extensions=ai;bmp;cdr;eps;gif;ico;jpeg;jpg;omf;pcx;pic;png;rle;svg;tif;tiff;webp;wmf;xbm;xcf;xpm

[database]
    extensions=cdx;dat;db;dbf;dbi;dbx;fox;mdb;mdn;mdx;msql;mssql;pgsql;sql;ssql

filehighlight.ini

Подсветка в bash
Для начала сделаем файл подсветки файлов и директорий через dircolors. Он по умолчанию уже установлен в Ubuntu. Будем брать разработку на github
https://github.com/trapd00r/LS_COLORS

nano .bashrc
#!/bin/bash
# Библиотека цветов https://wiki.archlinux.org/index.php/Bash/Prompt_customization_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
# Функции и прочие примеры http://dotshare.it/category/shells/bash/
# Цвета папок dircolors https://github.com/trapd00r/LS_COLORS


# Сброс
Color_Off='\e[0m'       # Text Reset

# Обычные цвета
Black='\e[0;30m'        # Black
Red='\e[0;31m'          # Red
Green='\e[0;32m'        # Green
Yellow='\e[0;33m'       # Yellow
Blue='\e[0;34m'         # Blue
Purple='\e[0;35m'       # Purple
Cyan='\e[0;36m'         # Cyan
White='\e[0;37m'        # White

# Жирные
BBlack='\e[1;30m'       # Black
BRed='\e[1;31m'         # Red
BGreen='\e[1;32m'       # Green
BYellow='\e[1;33m'      # Yellow
BBlue='\e[1;34m'        # Blue
BPurple='\e[1;35m'      # Purple
BCyan='\e[1;36m'        # Cyan
BWhite='\e[1;37m'       # White

# Подчёркнутые
UBlack='\e[4;30m'       # Black
URed='\e[4;31m'         # Red
UGreen='\e[4;32m'       # Green
UYellow='\e[4;33m'      # Yellow
UBlue='\e[4;34m'        # Blue
UPurple='\e[4;35m'      # Purple
UCyan='\e[4;36m'        # Cyan
UWhite='\e[4;37m'       # White

# Фоновые
On_Black='\e[40m'       # Black
On_Red='\e[41m'         # Red
On_Green='\e[42m'       # Green
On_Yellow='\e[43m'      # Yellow
On_Blue='\e[44m'        # Blue
On_Purple='\e[45m'      # Purple
On_Cyan='\e[46m'        # Cyan
On_White='\e[47m'       # White

# Высоко Интенсивные
IBlack='\e[0;90m'       # Black
IRed='\e[0;91m'         # Red
IGreen='\e[0;92m'       # Green
IYellow='\e[0;93m'      # Yellow
IBlue='\e[0;94m'        # Blue
IPurple='\e[0;95m'      # Purple
ICyan='\e[0;96m'        # Cyan
IWhite='\e[0;97m'       # White

# Жирные Высоко Интенсивные
BIBlack='\e[1;90m'      # Black
BIRed='\e[1;91m'        # Red
BIGreen='\e[1;92m'      # Green
BIYellow='\e[1;93m'     # Yellow
BIBlue='\e[1;94m'       # Blue
BIPurple='\e[1;95m'     # Purple
BICyan='\e[1;96m'       # Cyan
BIWhite='\e[1;97m'      # White

# Высоко Интенсивные фоновые
On_IBlack='\e[0;100m'   # Black
On_IRed='\e[0;101m'     # Red
On_IGreen='\e[0;102m'   # Green
On_IYellow='\e[0;103m'  # Yellow
On_IBlue='\e[0;104m'    # Blue
On_IPurple='\e[0;105m'  # Purple
On_ICyan='\e[0;106m'    # Cyan
On_IWhite='\e[0;107m'   # White

# Задаем параметры истории и отображения
HISTCONTROL=ignoredups:ignorespace
shopt -s histappend
HISTSIZE=3000
HISTFILESIZE=3000
shopt -s checkwinsize
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# Автодополнение bash-completion
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

# Задаем приглашение для пользователя и опеределение рута
if [ `id -un` = root ]; then
  PS1="┌ ${IRed}\u${Color_Off} [${BPurple}\w${Color_Off}] \n└─ \$ "
 else
PS1="┌ ${IGreen}\u${Color_Off} [${BPurple}\w${Color_Off}] \n└─ \$ "
fi

# Предотвращает случайное удаление файлов.
alias mkdir='mkdir -p'

# Подключаем dircolors
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"

# Цвета auto
alias "ls=ls --color=auto"
alias dmesg='dmesg --color=auto'
alias gcc='gcc -fdiagnostics-color=auto'
alias dir='dir --color=auto'
alias diff='diff --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi

# Раскрашиваем man
export LESS_TERMCAP_mb=$'\e[0;36m'      # начало мигания (Cyan)
export LESS_TERMCAP_md=$'\e[1;36m'  	# начало жирного шрифта (BCyan)
export LESS_TERMCAP_me=$'\e[0m'         # сброс (Color_Off)
export LESS_TERMCAP_se=$'\e[0m'         # сброс выделения (Color_Off)
export LESS_TERMCAP_so=$'\e[0;36m'      # начало выделения - информация (Cyan)
export LESS_TERMCAP_ue=$'\e[0m'         # конец подчеркивания (Color_Off)
export LESS_TERMCAP_us=$'\e[0;93m'      # начало подчеркивания (IYellow)

# Алиасы LS
alias ll='ls -alF'              # показать скрытые файлы с индикатором
alias la='ls -Al'               # показать скрытые файлы
alias lx='ls -lXB'              # сортировка по расширению
alias lk='ls -lSr'              # сортировка по размеру
alias lc='ls -lcr'              # сортировка по времени изменения
alias lu='ls -lur'              # сортировка по времени последнего обращения
alias lr='ls -lR'               # рекурсивный обход подкаталогов
alias lt='ls -ltr'              # сортировка по дате
alias lm='ls -al |more'         # вывод через 'more'

# Функция распаковки extract
function extract {
    if [ -z "$1" ]; then
        echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    else
        if [ -f $1 ] ; then
            case $1 in
                *.tar.bz2)   tar xvjf ./$1    ;;
                *.tar.gz)    tar xvzf ./$1    ;;
                *.tar.xz)    tar xvJf ./$1    ;;
                *.lzma)      unlzma ./$1      ;;
                *.bz2)       bunzip2 ./$1     ;;
                *.rar)       unrar x -ad ./$1 ;;
                *.gz)        gunzip ./$1      ;;
                *.tar)       tar xvf ./$1     ;;
                *.tbz2)      tar xvjf ./$1    ;;
                *.tgz)       tar xvzf ./$1    ;;
                *.zip)       unzip ./$1       ;;
                *.Z)         uncompress ./$1  ;;
                *.7z)        7z x ./$1        ;;
                *.xz)        unxz ./$1        ;;
                *.exe)       cabextract ./$1  ;;
                *)           echo "extract: '$1' - неизвестный архив" ;;
            esac
        else
            echo "$1 - файл не существует"
        fi
    fi
}

.bashrc
Цвета везде указаны auto. Иначе при указании always и перенаправлении вывода в файл будут передаваться данные о цветах шрифта
Цвета для схемы man страниц беруться из библиотеки цветов. Если указывать переменными, то они не воспринимаются
Указаны ссылки откуда взята информация

Итого должно получиться 3 файла:

.bashrc
.nanorc
.dircolors

Для того чтобы работало под root, необходимо их скопировать в папку /root/

sudo cp .bashrc .nanorc .dircolors /root/

Чтобы эти установки были для всех новых пользователей, необходимо скопировать эти файлы в skel

sudo cp .bashrc .nanorc .dircolors /etc/skel/

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *