Większość czasu spędzam pracując w środowiskach Uniksowych i używając emulatorów terminali. Próbuję użyć koloru w wierszu poleceń, ponieważ kolor sprawia, że wynik jest bardziej użyteczny i intuicyjny.
Jakie są opcje dodawania koloru do mojego środowiska terminala? Jakich sztuczek używasz? Jakie pułapki napotkałeś?
Niestety, obsługa kolorów różni się w zależności od typu terminala, systemu operacyjnego, ustawienia TERM, narzędzia, błędnych implementacji itp.
Oto kilka wskazówek dotyczących mojej konfiguracji , po wielu eksperymentach:
- Zwykle ustawiam
TERM=xterm-color
, który jest obsługiwany na większości hostów (ale nie na wszystkich). - Pracuję na wielu różnych hostach, różnych wersjach systemu operacyjnego itp. Używam wszystkiego, od macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux i FreeBSD. Jeśli to możliwe, staram się, aby wszystko było proste i ogólne.
- Wykonuję sporo pracy przy użyciu GNU
screen
, co dodaje kolejną warstwę zabawy. - Wiele systemów operacyjnych ustawia takie rzeczy jak
dircolors
i domyślnie, a nie chcę modyfikować tego na stu różnych hostach. Więc staram się trzymać wartości domyślnych. Zamiast tego poprawiam konfigurację kolorów terminala. -
Użyj koloru dla niektórych poleceń uniksowych (
ls
,grep
,less
,vim
) i Bash podpowiedź . Te polecenia wydają się używać standardowych „ sekwencji ucieczki ANSI „. Na przykład:alias less="less --RAW-CONTROL-CHARS" export LS_OPTS="--color=auto" alias ls="ls ${LS_OPTS}"
Opublikuję mój .bashrc
i odpowiem na moje własne pytanie Styl niebezpieczeństwa .
Komentarze
Odpowiedź
Oto kilka rzeczy, które możesz zrobić:
Redaktorzy + kod
Wiele redaktorów ma składnię podkreślanie wsparcia. vim
i emacs
mają go domyślnie włączone. Możesz również włączyć go w nano
.
Możesz również składać kod podświetlenia w terminalu, używając Pygments jako narzędzia wiersza poleceń.
grep
grep --color=auto
podkreśla wszystkie dopasowania. Możesz także użyć export GREP_OPTIONS="--color=auto"
, aby uczynić go trwałym bez aliasu. Jeśli używasz --color=always
, to „ll użyjesz koloru nawet podczas rur , co wprowadza zamieszanie.
ls
ls --color=always
Kolory określone przez:
export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33"
(wskazówka: dircolors
może być pomocna)
PS1
Możesz ustawić PS1 (znak zachęty) do używania kolorów. Na przykład:
PS1="\e[33;1m\u@\h: \e[31m\W\e[0m\$ "
Stworzy PS1 na przykład:
[yellow] lucas @ ubuntu: [red] ~ [normal] $
Dzięki temu możesz być naprawdę kreatywny. Jako pomysł:
PS1="\e[s\e[0;0H\e[1;33m\h \t\n\e[1;32mThis is my computer\e[u[\u@\h: \w]\$ "
Umieszcza pasek u góry terminala z przypadkowymi informacjami. (Aby uzyskać najlepsze wyniki, użyj także alias clear="echo -e "\e[2J\n\n""
.)
Pozbywanie się sekwencji ucieczki
Jeśli coś utknęło, wyświetlając kolor, kiedy tego nie chcesz, używam tego sed
linia do usunięcia sekwencji ucieczki:
sed "s/\[^[[0-9;]*[a-zA-Z]//gi"
Jeśli chcesz uzyskać bardziej autentyczne wrażenia, możesz również pozbyć się linii zaczynających się od \e[8m
, co instruuje terminal, aby ukrył tekst. (Nie jest szeroko obsługiwany).
sed "s/^\[^[8m.*$//gi"
Pamiętaj też, że te ^ [s powinny być rzeczywiste, dosłowne ^ [s. Możesz je wpisać naciskając ^ V ^ [w bash, czyli Ctrl + V , Ctrl + [ .
Komentarze
- Pierwsza linia PS1 powinna wyglądać następująco:
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
. Po czwartym ukośniku odwrotnym znajduje się zbędny znak x. - Escapes powinny być umieszczone w
\[...\]
, w przeciwnym razie polecenia w drugiej linii nadpiszą pierwszą linię. PS1 = ' [ \ e [33; 1m ] \ u @ \ h: [ \ e [31m ] \ W \ e [0m \ $ ' -
ls --color=always
nie ' nie działa.Podejście @Michael Durrant ' jest lepsze w tym przypadku:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Odpowiedź
Używam również:
export TERM=xterm-color export GREP_OPTIONS="--color=auto" GREP_COLOR="1;32" export CLICOLOR=1 export LSCOLORS=ExFxCxDxBxegedabagacad
A jeśli lubisz pokolorować podpowiedź, zdefiniowane zmienne kolorów mogą bądź przydatny:
export COLOR_NC="\e[0m" # No Color export COLOR_BLACK="\e[0;30m" export COLOR_GRAY="\e[1;30m" export COLOR_RED="\e[0;31m" export COLOR_LIGHT_RED="\e[1;31m" export COLOR_GREEN="\e[0;32m" export COLOR_LIGHT_GREEN="\e[1;32m" export COLOR_BROWN="\e[0;33m" export COLOR_YELLOW="\e[1;33m" export COLOR_BLUE="\e[0;34m" export COLOR_LIGHT_BLUE="\e[1;34m" export COLOR_PURPLE="\e[0;35m" export COLOR_LIGHT_PURPLE="\e[1;35m" export COLOR_CYAN="\e[0;36m" export COLOR_LIGHT_CYAN="\e[1;36m" export COLOR_LIGHT_GRAY="\e[0;37m" export COLOR_WHITE="\e[1;37m"
A potem moja zachęta wygląda mniej więcej tak:
case $TERM in xterm*|rxvt*) local TITLEBAR="\[\033]0;\u ${NEW_PWD}\007\]" ;; *) local TITLEBAR="" ;; esac local UC=$COLOR_WHITE # user"s color [ $UID -eq "0" ] && UC=$COLOR_RED # root"s color PS1="$TITLEBAR\n\[${UC}\]\u \[${COLOR_LIGHT_BLUE}\]\${PWD} \[${COLOR_BLACK}\]\$(vcprompt) \n\[${COLOR_LIGHT_GREEN}\]→\[${COLOR_NC}\] "
$ (vcprompt) wywołuje skrypt Pythona w moim ~ / sbin, który wyświetla informacje kontroli wersji o bieżącej ścieżce. Obejmuje wsparcie dla Mercurial, Git, Svn, Cvs itp. Autor skryptu ma źródło tutaj .
To jest pełne źródło mojej konfiguracji podpowiedzi:
Komentarze
- Zobacz tutaj rozwiązanie problemu z linią, który otrzymałem, gdy użyłem powyższego PS1: stackoverflow.com/questions/5087036/…
- I ' zaktualizowaliśmy odpowiedź, aby odzwierciedlić nawiasy ze znakami ucieczki dla kolorów w zachęcie. Dzięki!
-
$LSCOLORS
i$CLICOLOR
są przeznaczone dla BSD ls. GNU ls (Linux) używa$LS_COLORS
z inną składnią. Ponieważ GNU czuję się jak w domu, używamLSCOLORS=exgxfxDacxBaBaCaCaeaEa
do naśladowania kolorów GNU ' na BSD. -
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
- Może być konieczne pobranie pliku
.bashrc
, aby modyfikacja odniosła skutek. Możesz to zrobić za pomocą następującego polecenia.source /path/to/.bashrc
Odpowiedź
grep
i ls
zostały już wspomniane, jeśli chcesz mieć dużo więcej kolorów, wypróbuj Generic Coloriser , jego pierwotnym celem było pokolorowanie plików dziennika, ale zaraz po wyjęciu z pudełka koloruje również ping
, traceroute
, gcc
, make
, netstat
, diff
, last
, ldap
i cvs
.
Można je łatwo rozszerzyć, jeśli znać wyrażenia regularne. Dodałem do listy ps
i nmap
(jeśli dojdziesz do grc
Z przyjemnością udostępnię pliki .conf dla tych dwóch narzędzi)
(Przy okazji, aby zainstalować przez synaptic
, pacman
i podobnie możesz mieć więcej szczęścia w wyszukiwaniu for „grc”)
Komentarze
-
grc
obsługuje terazps
domyślnie. ' bym zainteresował się Twoiminmap
kolorami. Zobacz także moją odpowiedź dotyczącą aliasowania wszystkich tych elementów w sposób, który wchłonie nowe polecenia podczas aktualizacji grc. - Zauważyłem to. tutaj ' s moja konf.nmapa (i wszystko inne, naprawdę) gist.github.com/sygo/844982#file-conf -nmap – Zauważyłem, że pracujesz w infosec, możesz uznać conf.hexdump za interesujący, ale nie ' jeszcze go nie skończyłem.
- Dzięki @Sygo. ' rozwidliłem i poprawiłem Twoją istotę. ' nigdy nie zatwierdzałem danych za pomocą git (nie mówiąc już o github ' gists) i nie mogę dowiedzieć się, jak zaproponować scalenie ich z powrotem do ciebie (ja ' zgaduję, że to dlatego, że streszczenia są zbyt uproszczone).
- Podejrzewam, że możesz ' t ponieważ jest to ' istota, a nie właściwe repozytorium. Sprawdziłem jednak twój fork i ' zdecydowanie próbuję twojej wersji. Jestem ' ciekawy, w co ten zrzut szesnastkowy zmieni się w …
Odpowiedź
Przez lata doskonaliłem mój .bashrc, aby pracować zarówno na OSX, jak i Ubuntu.
Zmniejszyłem również rozmiar do 28 wierszy za pomocą zwartych instrukcji warunkowych.
Dzięki temu , mój znak zachęty PS1 wygląda tak:
z czasem na czerwono, nazwa użytkownika na zielono, nazwa komputera na jasnoniebieskim, pwd na ciemnoniebieskim i gałąź git na żółto.
Funkcja mojego znaku zachęty PS1:
- pokazuje gałąź git!
- długie ścieżki katalogów (więcej niż 6 elementów) to ” przycięte „, aby pokazać pierwsze 3 i ostatnie 3 katalogi z
_
między nimi (to jestpwd sed
część LOKALIZACJI). - powrót karetki na końcu, aby znak zachęty był zawsze po lewej stronie!
Odpowiednie wiersze z mojego pliku .bashrc
to:
git_branch () { git branch 2> /dev/null | sed -e "/^[^*]/d" -e "s/* \(.*\)/\1/"; } HOST="\033[02;36m\]\h"; HOST=" "$HOST TIME="\033[01;31m\]\t \033[01;32m\]" LOCATION=" \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`" BRANCH=" \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ " PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2="\[\033[01;36m\]>"
Dla ls z kolorami, jeśli są dostępne d brak błędów, gdy nie (tj.OSX):
ls --color=al > /dev/null 2>&1 && alias ls="ls -F --color=al" || alias ls="ls -G"
Komentarze
- Kolory są dostępne dla
ls
na OS X, ale robi się to za pomocąexport CLICOLOR=1
. - @ThomasW, ale nie na linux :-p Facet używa obu.
- Niemniej ThomasW ma rację, wskazując, że odpowiedź jest błędna, mówiąc, że kolory nie są dostępne w
ls
na MacOS 10. Odpowiedź jest również błędna, ponieważ ciągi zachęty są w rzeczywistości błędne. Nie prawidłowo równoważą\[
i\]
, a spowodowały problemy dla co najmniej jednej osoby kopiującej tę odpowiedź .
Odpowiedź
Kolory stron podręcznika ( więcej szczegółów ):
function _colorman() { env \ LESS_TERMCAP_mb=$(printf "\e[1;35m") \ LESS_TERMCAP_md=$(printf "\e[1;34m") \ LESS_TERMCAP_me=$(printf "\e[0m") \ LESS_TERMCAP_se=$(printf "\e[0m") \ LESS_TERMCAP_so=$(printf "\e[7;40m") \ LESS_TERMCAP_ue=$(printf "\e[0m") \ LESS_TERMCAP_us=$(printf "\e[1;33m") \ "$@" } function man() { _colorman man "$@"; } function perldoc() { command perldoc -n less "$@" |man -l -; }
Kolory dla grep (1;32
jest jasnozielony, zobacz inne posty dla innych kolorów):
GREP_OPTS="--color=auto" # for aliases since $GREP_OPTIONS is deprecated GREP_COLOR="1;32" # (legacy) bright green rather than default red GREP_COLORS="ms=$GREP_COLOR" # (new) Matching text in Selected line = green alias grep="grep $GREP_OPTS" alias egrep="egrep $GREP_OPTS" alias fgrep="fgrep $GREP_OPTS"
Więcej kolorów dla GNU ls :
# use the config at ~/.dircolors if it exists, otherwise generate anew eval "$( dircolors --sh $(ls -d ~/.dircolors 2>/dev/null) )" # Usage: _ls_colors_add BASE NEW [NEW...] # Have LS color given NEW extensions the way BASE extension is colored _ls_colors_add() { local BASE_COLOR="${LS_COLORS##*:?.$1=}" NEW if [ "$LS_COLORS" != "$BASE_COLOR" ]; then BASE_COLOR="${BASE_COLOR%%:*}" shift for NEW in "$@"; do if [ "$LS_COLORS" = "${LS_COLORS#*.$NEW=}" ]; then LS_COLORS="${LS_COLORS%%:}:*.$NEW=$BASE_COLOR:" fi done fi export LS_COLORS } _ls_colors_add zip jar xpi # archives _ls_colors_add jpg ico JPG PNG webp # images _ls_colors_add ogg opus # audio (opus now included by default) CLICOLOR=1 # BSD auto-color trigger (like ls -G but for everything) if ls -ld --color=auto / >/dev/null 2>&1 then alias ls="ls -ph --color=auto" else alias ls="ls -ph" fi
Zainstaluj grc
( Ogólny koloryzator ) i dodaj go do swoich aliasów:
# using this as a variable allows easier calling down lower export GRC="grc -es --colour=auto" # loop through known commands plus all those with named conf files for cmd in g++ head ld ping6 tail traceroute6 `locate grc/conf.`; do cmd="${cmd##*grc/conf.}" # we want just the command # if the command exists, alias it to pass through grc type "$cmd" >/dev/null 2>&1 && alias "$cmd"="$GRC $cmd" done # This needs run-time detection. We even fake the "command not found" error. configure() { if [[ -x ./configure ]]; then colourify ./configure "$@" else echo "configure: command not found" >&2 return 127 fi } # GRC plus LS awesomeness (assumes you have an alias for ls) unalias ll 2>/dev/null if ls -ld --color=always / >/dev/null 2>&1; then GNU_LS="--color=always"; fi ll() { if [[ -t 1 ]] || [[ -n "$CLICOLOR_FORCE" ]] then colourify ls -l $GNU_LS "$@" else ls -l "$@" fi }
Kolory dla diff : Za dużo treści dla funkcji, użyj skryptu i aliasu w pliku rc (niepotrzebne, jeśli zainstalowałeś grc
):
#!/usr/bin/perl use strict; use warnings; open (DIFF, "-|", "diff", @ARGV) or die $!; my $ydiff = 1; while (<DIFF>) { if (not -t 1) { print; next; } chomp; $ydiff = 0 if /^[ <>\@+-]/ or ($. == 1 && /^\d+[a-z]{1,5}\d+$/); my $color = ""; if (! $ydiff && /^[\@+-<>]/) { $color = (/^[<-](?!--$)/ ? 1 : /^[+>]/ ? 2 : 5); } elsif ($ydiff && /\t {6}([<|>])(?:\t|$)/) { $color = ($1 eq "<" ? 1 : $1 eq ">" ? 2 : 4); } $color ? printf ("\e[1;3%dm%s\e[0;0m\n",$color,$_) : print "$_\n"; } close DIFF;
Kolory dla bash prompt :
# Shorten home dir, cygwin drives, paths that are too long if [ -d /cygdrive ] && uname -a |grep -qi cygwin; then CYGWIN_OS=1; fi function PSWD() { local p="$*" space A B cols="${COLUMNS:-`tput cols 2>/dev/null || echo 80`}" p="${p/$HOME/\~}" # shrink home down to a tilde if [ -n "$CYGWIN_OS" ] && [ "${p#/cygdrive/?/}" != "$p" ]; then p="${p:10:1}:${p:11}" # /cygdrive/c/hi -> c:/hi fi space="$((${#USER}+${#HOSTNAME}+6))" # width w/out the path if [ "$cols" -lt 60 ]; then echo -n "$N "; space=-29; p="$p$N\b"; fi if [ "$cols" -lt "$((space+${#p}+20))" ]; then # < 20 chars for the command A=$(( (cols-20-space)/4 )) # a quarter of the space (-20 for cmd) if [ $A -lt 4 ]; then A=4; fi # 4+ chars from beginning B=$(( cols-20-space-A*2 )) # half (plus rounding) of the space if [ $B -lt 8 ]; then B=8; fi # 8+ chars from end p="${p:0:$A}..${p: -$B}" fi echo "$p" } PSC() { echo -ne "\[\033[${1:-0;38}m\]"; } PR="0;32" # default color used in prompt is green if [ "$(id -u)" = 0 ]; then sudo=41 # root is red background elif [ "$USER" != "${SUDO_USER:-$USER}" ]; then sudo=31 # not root, not self: red text else sudo="$PR" # standard user color fi PROMPT_COMMAND="[ $? = 0 ] && PS1=${PS1[1]} || PS1=${PS1[2]}" PSbase="$(PSC $sudo)\u$(PSC $PR)@\h $(PSC 33)\$(PSWD \w)" PS1[1]="$PSbase$(PSC $PR)\$ $(PSC)" PS1[2]="$PSbase$(PSC 31)\$ $(PSC)" PS1="${PS1[1]}" unset sudo PR PSbase
Komentarze
- Zagłosuj za zrzutem ekranu
- Moja
PSWD()
funkcja była kiedyś zgodna z POSIX, ale ' jest o wiele łatwiejsza przy użyciu obsługi podciągów bash / zsh. Zobacz wersja 6 dla wersji POSIX, która zawiera wiele znaków zapytania i nie była ' w ogóle przystosowana do terminala szerokość. Nie ' nie zaktualizowałem zrzutu ekranu, ale ' to tylko niewielka zmiana przy szerokości 80 znaków. -
CLICOLOR=1
nie ' nie działa dla mnie z FREEBSD 11.2 - @SimonC. – Być może używasz narzędzi GNU w systemie FreeBSD, a nie BSD.
CLICOLOR=1 ls
powinno zrobić to samo, cols -G
przy użyciu BSD (ls -g
na starszych BSD). Jeślils --color
działa (bez błędu), ' używasz GNU ' sls
i$CLICOLOR
jest ignorowane. - @SimonC. – Musisz faktycznie załadować
~/.bashrc
, aby zmiany odniosły skutek. Uruchomsource ~/.bashrc
lub rozpocznij nową sesję basha (uruchom terminal lub uruchombash
).
Odpowiedź
Ustaw pogrubioną / kolorową podpowiedź. Z cyberciti.biz i BashFAQ
# "tput bold" will work regardless of the foreground and background colors. # Place the tput output into variables, so they are only execd once. bold=$(tput bold) # This could also be a color. reset=$(tput sgr0) export PS1="\u@\[$bold\]\h\[$reset\]:\w \$ "
Udało mi się również znaleźć ustawienia kolorów, które są szeroko obsługiwane i które nie wyświetlają znaków gobbledygook w starszych środowiskach (nawet FreeBSD4!) i wydaje się działać dobrze, jeśli TERM = vt100, xterm , kolor xterm. (Przez większą część). Z mojego .bashrc:
# Set some options, based on the OS OS=`uname -s` case "$OS" in "SunOS" ) # Solaris ls doesn"t allow color, so use special characters LS_OPTS="-F" alias ls="ls ${LS_OPTS}" ;; "Linux" ) # GNU ls supports colors! # See dircolors to customize colors export LS_OPTS="--color=auto" alias ls="ls ${LS_OPTS}" # Get color support for "less" export LESS="--RAW-CONTROL-CHARS" # Use colors for less, man, etc. [[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP export GREP_OPTIONS="--color=auto" ;; "Darwin"|"FreeBSD") # Most FreeBSD & Apple Darwin supports colors export CLICOLOR=true # Get color support for "less" export LESS="--RAW-CONTROL-CHARS" # Use colors for less, man, etc. [[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP export GREP_OPTIONS="--color=auto" ;; * ) echo "Unknown OS [$OS]" ;; esac
Komentarze
- Lub jeśli chcesz użyć ZSH, Phil Gold ' podpowiedź w aperiodic.net/phil/prompt to dzieło sztuki.
Odpowiedź
Rzeczy, które nie zostały tu już powiedziane:
Aby pokolorować wyjście swoich kompilacji za pomocą gcc , jest colorgcc autorstwa Johannesa Schlütera
Aby pokolorować logi, jest multitail
Aby pokolorować dowolne standardowe wyjście, połączyłem xcol
Osobiście używam te z narzędzia xcol.
#normal=$(tput sgr0) # normal text normal=$"\e[0m" # (works better sometimes) bold=$(tput bold) # make colors bold/bright red="$bold$(tput setaf 1)" # bright red text green=$(tput setaf 2) # dim green text fawn=$(tput setaf 3); beige="$fawn" # dark yellow text yellow="$bold$fawn" # bright yellow text darkblue=$(tput setaf 4) # dim blue text blue="$bold$darkblue" # bright blue text purple=$(tput setaf 5); magenta="$purple" # magenta text pink="$bold$purple" # bright magenta text darkcyan=$(tput setaf 6) # dim cyan text cyan="$bold$darkcyan" # bright cyan text gray=$(tput setaf 7) # dim white text darkgray="$bold"$(tput setaf 0) # bold black = dark gray text white="$bold$gray" # bright white text
Używam tych zmiennych w moich skryptach w ten sposób
echo "${red}hello ${yellow}this is ${green}coloured${normal}"
Podoba mi się również ta mała funkcja coloredEcho (znaleziona na Stack Overflow)
function coloredEcho(){ local exp=$1; local color=$2; if ! [[ $color =~ "^[0-9]$" ]] ; then case $(echo $color | tr "[:upper:]" "[:lower:]") in black) color=0 ;; red) color=1 ;; green) color=2 ;; yellow) color=3 ;; blue) color=4 ;; magenta) color=5 ;; cyan) color=6 ;; white|*) color=7 ;; # white or invalid color esac fi tput setaf $color; echo $exp; tput sgr0; } coloredEcho "This text is green" green
Przepraszamy, nie mogę wysyłać więcej linków
Komentarze
- Witaj, jak tworzysz flagi dla ścieżki zachęty? Wspominam o prostokątnych słupkach z trójkątnymi końcami. Dzięki
- czy to działa również w terminalu Ubuntu GNU?
- lnav to także świetne narzędzie do wyświetlania kolorowych plików dziennika
Odpowiedź
Jest dobre narzędzie do ustawiania kolorów dla polecenia ls – http://geoff.greer.fm/lscolors/
Odpowiedź
Proponuję sprawdzić ZSH i jego wtyczka oh-my-zsh , która ma jedną z najpotężniejszych funkcji konsolowych, jakie widziałem. Jednym z nich jest wybór motywu dla Twój terminal. To jest przykład mojego motywu … W tty kolory nie są tak ciepłe, ale są takie same jak na tym zdjęciu … Spodoba ci się to w każdym razie!
Komentarze
- Gdybym mógł, zagłosowałbym negatywnie na Oh-My-ZSH sugestia. Jako inżynier systemowy, który intensywnie pracuje w Terminalu i jako ktoś, kto próbował wdrożyć zsh / oh-my-zsh do mojego przepływu pracy, mogę szczerze powiedzieć, że nigdy nikomu nie poleciłbym ZSH. Jasne, możesz dowiązać symbolicznie zsh do pliku nazwanego na cześć dowolnej innej powłoki i emulować tę powłokę, ale kiedy to zrobisz, nie będzie to ' t czytać twojego .bashrc, .bash_profile itp. , nie możesz umieścić
emulate bash
w swoich plikach .zprofile ani .zshrc. Dla każdego, kto pracuje z zaawansowanymi funkcjami w BASH, istnieje wiele subtelności, które cię ugryźają. BASH jest lepszym sh. - Jedyną rzeczą, którą ZSH ma po wyjęciu z pudełka, która jest lepsza niż BASH, jest uzupełnianie poleceń, ale nawet to można programować w BASH. Może ktoś, kto ' nie używa powłoki poza okazjonalnymi, przyziemnymi zadaniami, powinien przyjąć ZSH, ale ' nie jest dla nikogo, kto musi intensywnie używaj powłoki. operator
=~
może cię ugryźć, sposób, w jaki ZSH obsługuje tablice, może cię ugryźć itp. Po używaniu ZSH / Oh-My-ZSH przez około 9 miesięcy miałem go dość. Używałem niestandardowego motywu, który napisałem samodzielnie, przeportowałem go do BASH i napisałem własną linię zachęty gita i ' nigdy nie oglądałem się za siebie. Teraz nie martwię się już o przenośność - ” ma jedną z najpotężniejszych funkcji konsoli, jakie widziałem. Jednym z nich jest wybór motywu dla Twojego terminala. ”
- @JonathanHartley, Twój komentarz wygląda na to, że zostawiłeś go niekompletny. ?
- Dziękuję za troskę, ale mój komentarz mówi wszystko, co chciałem powiedzieć.
Odpowiedź
Aby wyświetlić wynik różnic w kolorze, użyj colordiff .
sudo apt-get install colordiff
Pipe dowolne wyjście w formacie diff do colordiff:
Obejmuje to niektóre alternatywne formaty diff, takie jak -y
(side-by-side.)
Alternatywnie, jeśli jest wywoływany samodzielnie ( bez niczego potokowanego), to zachowuje się jak otoka wokół „diff” i koloruje wyjście. Dlatego mam to w moim .bashrc, na alias „diff” do colordiff.
# if colordiff is installed, use it if type colordiff &>/dev/null ; then alias diff=colordiff
Komentarze
- W przykładzie
.bashrc
brakuje ostatniegofi
i można je przekonwertować na polecenie jednowierszowe:type colordiff &> /dev/null && alias diff='colordiff'
Odpowiedź
Trochę dekoracji tekstu (pogrubienie) w celu łatwego odróżnienia powłoki głównej od powłoki innej niż root. Dla Zsh:
if test $UID = 0 then PS1="%B${PS1}%b " fi
Dla Bash:
if test $UID = 0 then PS1="\033[1m${PS1}\033[0m" fi
Komentarze
- Określ swoją powłokę. Pytanie ' jest jedynym znacznikiem specyficznym dla powłoki jest bash , ale wydaje mi się, że Twój kod nie jest
bash
. - @manatwork: przepraszam, zapomniałem wspomnieć, że to Zsh. Zaktualizowałem mój post.
Odpowiedź
Po prostu zastanawiałem się nad tym samym. Mam własne podejście, ale szukam alternatyw.
Piszę opakowania basha wokół wywołań programów i potokiem ich dane wyjściowe, chociaż sed
. Co mi się podoba sed
polega na tym, że od razu zmieni i powtórzy każdą linię => niewiele buforuje. Jednak nie podoba mi się to, że przy każdym wywołaniu opakowanego programu sed
kod jest analizowany i kompilowany.
Na przykład to, co robię, aby pokolorować wyjście ip
:
# # Colorcodes # NORMAL=`echo -e "\033[0m"` RED=`echo -e "\033[31m"` GREEN=`echo -e "\033[0;32m"` LGREEN=`echo -e "\033[1;32m"` BLUE=`echo -e "\033[0;34m"` LBLUE=`echo -e "\033[1;34m"` YELLOW=`echo -e "\033[0;33m"` # # command: ip # highlight ip addresses, default route and interface names # IP4=$GREEN IP6=$LBLUE IFACE=${YELLOW} DEFAULT_ROUTE=$LBLUE IP_CMD=$(which ip) function colored_ip() { ${IP_CMD} $@ | sed \ -e "s/inet [^ ]\+ /${IP4}&${NORMAL}/g"\ -e "s/inet6 [^ ]\+ /${IP6}&${NORMAL}/g"\ -e "s/^default via .*$/${DEFAULT_ROUTE}&${NORMAL}/"\ -e "s/^\([0-9]\+: \+\)\([^ \t]\+\)/\1${IFACE}\2${NORMAL}/" } alias ip="colored_ip"
Odpowiedź
Aby ustawić monit, mam to w moim pliku .bashrc.
#Set variables for foreground colors fgRed=$(tput setaf 1) ; fgGreen=$(tput setaf 2) ; fgBlue=$(tput setaf 4) fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6) fgWhite=$(tput setaf 7) ; fgBlack=$(tput setaf 0) #Set variables for background colors bgRed=$(tput setab 1) ; bgGreen=$(tput setab 2) ; bgBlue=$(tput setab 4) bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6) bgWhite=$(tput setab 7) ; bgBlack=$(tput setab 0) #Set variables for font weight and text decoration B=$(tput bold) ; U=$(tput smul) ; C=$(tput sgr0) #NOTE: ${C} clears the current formatting if [[ $USER = "root" ]]; then PS1="${B}${fgRed}\u${C}@\h(\s): ${fgGreen}\w${C} > " else PS1="${B}${fgCyan}\u${C}@\h(\s): ${fgGreen}\w${C} > " fi
To daje mi komunikat, który wygląda mniej więcej tak:
user@host(bash): ~/bin >
Katalog roboczy jest zielony . A nazwa użytkownika jest pogrubiona i niebieskozielona, chyba że uruchomiłem powłokę z sudo
, w którym to przypadku nazwa użytkownika („root”) jest pogrubiona i czerwona.
Osobiście bardzo podoba mi się przechowywanie znaków sterujących formatowaniem w zmiennych, ponieważ ułatwia to czytanie kodu do ustawiania zachęty. Ułatwia również edycję zachęty o wiele .
Powodem, dla którego używam tput
jest to, że powinien być bardziej uniwersalny niż dziwne sekwencje 033[01;31m\]
. Dodatkowo, jako dodatkowy bonus, jeśli wykonasz echo $PS1
po monicie, zobaczysz nieprzetworzony znak zachęty z kolory zamiast tych niezrozumiałych sekwencji sterujących.
Odpowiedź
Możesz również wypróbować projekt, który pomaga w kolorowaniu wyników skryptów, jego nazwany ScriptEchoColor w źródłowej kuźni: http://scriptechocolor.sourceforge.net/
np .:
echoc "@{lr}text output in light red" echoc "@{bLGu}text outpus in blue, light green background and underlined" echoc "you @{lr} can @{bLGu} mix @{-a} it all too" echoc -x "ls" #executes ls command and colorizes it automatically to be easy to be seen
Kolory automatyczne są konfigurowalne.
to przykład zrobiony z tym:
Odpowiedź
Doskonałym narzędziem ogólnego przeznaczenia w Pythonie do kolorowania wyników poleceń jest „ colout „
Dajesz mu wyrażenie regularne z N grupami, po których następuje lista N kolorów oddzielonych przecinkami. Każdy tekst pasujący do grupy zostanie wyświetlony w odpowiednim kolorze.
Na przykład, jeśli „patrzysz na jakiś wynik testu:
python -m unittest discover -v
następnie możesz go ozdobić się z:
python -m unittest discover -v 2>&1 | colout "(.*ERROR$)|(.*FAIL$)|(\(.*\))" red,yellow,black bold
Zobacz, jak moje wyrażenie regularne ma trzy grupy (nawias), po których następują trzy kolory (i opcjonalnie trzy style, ale użyłem skrótu, aby ustawić wszystkie kolory na „pogrubione”) , więc „czarna” grupa, do której pasuje tekst w nawiasach, ma kolor ciemnoszary.)
Zwróć też uwagę, jak musiałem dodać 2>&1
na końcu wywołania Pythona, ponieważ wynik unittest znajduje się na stderr, więc przeniosłem go na stdout, aby móc potokować go do colouta.
Generalnie jest to tak łatwe w użyciu, że często tworzyłem nowe colout invocat jony w locie i ponowne ich używanie lub modyfikowanie z mojej historii wiersza poleceń.
Jedynym jego minusem jest to, że jest to pakiet Pythona, a nie samodzielny plik wykonywalny, więc musisz zainstalować używając pip lub sudo python setup.py install
.
Odpowiedź
Solaryzacja jest przydatna. To zgrabny projekt z jednolitymi kolorami dla wielu aplikacji.
http://ethanschoonover.com/solarized https://github.com/altercation/solarized
Odpowiedź
Możesz użyć mojego cf do kolorowania nazw plików w wierszu poleceń, jest to szybki, mały, oparty na awk koloryzator, który działa przez potoki – kolorowanie nazw plików w Truecolor sRGB.
Ma jaskrawe kolory domyślna konfiguracja iw przeciwieństwie do ls nie powoduje spadku wydajności przy dodawaniu nowych kolorów. (ls musi skanować cały ciąg LS_COLORS dla każdego braku).
https://github.com/AdamDanischewski/cf
Odpowiedź
Na Macu możesz użyć następującego tutaj
if [ "$TERM" = xterm ]; then TERM=xterm-256color; fi
if [ "$TERM" = xterm ]; then TERM=xterm-256color; fi
Odpowiedź
Używam kolorowego opakowania .
cw to nieinwazyjne opakowanie koloru ANSI w czasie rzeczywistym dla typowych poleceń opartych na Uniksie w systemie GNU / linux. cw ma na celu symulację środowiska wykonywanych poleceń, więc jeśli osoba wpisze w swojej powłoce „du”, „df”, „ping” itp., automatycznie pokoloruje wyjście w czasie rzeczywistym zgodnie z definicją plik zawierający żądany format koloru. cw obsługuje kolorowanie symboli wieloznacznych, kolorowanie tokenizowane, nagłówki / stopki, kolorowanie scenariuszy przypadków, kolorowanie definicji zależnych od wiersza poleceń i zawiera ponad 50 gotowych plików definicji.
Jest prawie bezproblemowe, ale kiedy odkryłem, że ps w powłoce interaktywnej zwraca inne wyjście, porównując ps w potoku.
Odpowiedź
Jeśli chcesz, aby Twój vim
był kolorowy tak jak ja, sugeruję wykonanie dwóch kroków:
- naucz się włączać funkcję, klikając ten link: włącz podświetlanie składni kolorów w vi lub vim .
kluczowe kroki w linku:
Edytuj plik ~ / .vimrc, wpisując polecenie: vi ~ /.vimrc
Dołącz następującą opcję: składnia w
Zapisz i zamknij plik
Przetestuj, uruchamiając polecenie vim: vim foo.sh
- znajdź odpowiedni schemat kolorów i użyj go. Schemat, którego używam: schemat, którego używam
Komentarze
- Korzystając z linków do źródła zewnętrznego, należy sprawdzić część ” Podaj kontekst dla linków ” (Cytuj ważne części) odpowiedniej części przewodnika: unix.stackexchange.com/help/how-to-answer
Odpowiedź
Jeśli wolisz bash, polecam oh-my-bash . Jeśli wybierzesz zsh, polecam oh-my-zsh . Oba obsługują kolorowanie terminala i różne wyjścia.
Odpowiedź
Chcę pokornie reklamować moją ostatnią publikację z ta
lub textattr , biblioteka i narzędzie wiersza poleceń ma to na celu ułatwienie dodawania koloru i atrybutów w celu upiększenia wyjścia terminala programu poprzez przetłumaczenie specyfikacji czytelnych dla człowieka na kody ucieczki ANSI.
Na przykład:
echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"
lub jeszcze krócej:
echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"
lub inny:
tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"
wyświetli coś takiego:
Obecnie ta biblioteka jest dostępna w czterech językach C, C ++, D i Python, z wyjątkiem używania wiersza poleceń z Twojej ulubionej powłoki .
Zauważ, że nie powoduje to automatycznego kolorowania wyników innych programów. Jest to raczej narzędzie, które pomaga pragnąc zapamiętać zawiłe kody. Wystarczy użyć oczywistych nazw kolorów lub ich łatwych do zapamiętania rgb cmyk w (hite) (of) f skróty.
Aby uzyskać więcej informacji, odwiedź repozytorium textattr .
column -t --color
?