Cor diferente para comando e saída

13

Eu queria saber se é possível alterar a cor da saída de um comando no linux para uma cor diferente daquela da linha de comando em que digito. É algo monótono e difícil de encontrar onde a saída começa. gostar,

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

obrigado

raj
fonte
2
talvez usando precmd_functions você possa alterar a cor do prompt e configurá-lo novamente antes de preexec_functions ou algo parecido. (em zsh, eu não sei se há um equivalente para outras conchas)
pataluc
Eu apenas tentei minha sugestão, mas eu não recebo o comando colorido ... :(
pataluc
1
@pataluc: eu consegui preexec () { echo -n "\\e[40;34m" }; Se a precmdfunção IMHO não for necessária, parece que o zsh redefine a própria cor antes de exibir o prompt. Mas isso funciona apenas para os comandos que não alteram a cor em si (exemplo de destaque ls) como apontado por Aaron. Com cat, bccomandos internos do shell, etc. (par alpine) isso funciona bem.
mpy
@mpy i conseguiu também, com todos os comandos, assumindo raj quer colorir o comando e não o resultado, eu adicionado "\\e[40;34m"ao fim da minha PROMPTvar, e configurá-lo de volta ao branco com preexec () { echo -n "\\e[40;37m" }...
pataluc
1
@pataluc: Desculpe, agora entendi. Para colorir a linha de comando, use zle_highlight=(default:fg=cyan)uma versão recente do zsh. O Zsh também oferece cores dinâmicas, como fish; veja a seção DESTAQUE DE PERSONAGENS no man zshzle.
mpy

Respostas:

5

Na verdade não; a cor da saída de um determinado programa é controlada pelo comando, não pelo terminal.

Dito isso, supondo que o seu terminal compreenda códigos de escape ANSI para cores (a maioria faz), você pode usar códigos de escape para definir a cor desejada no início do prompt e a cor desejada no final; isso resultaria em suas linhas de comando também com a cor que você definiu para a saída, mas provavelmente é o mais próximo que você conseguirá do que está procurando. Por exemplo, o seguinte:

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

fornecerá um prompt parecido com:

user@host:wd $ _

com 'user' e 'host' em roxo, 'wd' (seu cwd) em marrom (amarelo escuro) e tudo depois do '$' em qualquer que seja o terminal usado para azul claro. (Um xterm padrão renderiza isso em ciano; o gnome-terminal parece ter um tom bastante agradável de azul centáurea.)

O código de cores real, conforme especificado no formato necessário para o bash, é, por exemplo \[\033[00;35m\], onde 00;35é a especificação de cores real; o líder 00raramente muda, mas pode produzir efeitos de negrito (01), sublinhado (??) e vídeo reverso (??) do IIRC, enquanto o '35' à direita é a cor real, que neste caso é roxa.

É surpreendentemente difícil encontrar uma lista decente de códigos de cores ANSI, mas as cores de primeiro plano variam de 30 a 37 e as de segundo plano, de 40 a 47, da seguinte maneira:

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

Lembre-se de que, como você define uma cor padrão para tudo o que segue sua solicitação, os programas executados que não definem suas próprias cores por meio de códigos de escape terão essa cor - por exemplo, se você executar um pager, é provável que você veja a saída na mesma cor que definiu para outros comandos. Enquanto isso, os comandos que não definir suas próprias cores através de códigos de escape irá ignorar seus esforços inteiramente.

Aaron Miller
fonte
1
Em vez de códigos de escape, descobri que o uso tputé muito mais legível para colorir. Por exemplo, meu prompt (no bash) é o export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "que mostra a hora, o nome de usuário em uma cor, @em outra e o nome do host em um terceiro (vermelho, branco e azul no momento), depois imprime o PWD e $ . É muito fácil ver rapidamente onde estão as linhas de prompt ao rolar para trás no histórico.
MattDMo
ur incrível ... isso é tudo que eu sempre quis. Obrigado, você poderia me dizer quais valores mudar, se eu quiser mudar de cor?
raj
e existe uma maneira de manter o último igual à cor anterior?
raj
e por que não é o permenant mudança, cada vez que eu entrar, eu tenho que cor-lo novamente
raj
1
A alteração não é permanente, a menos que você a adicione no arquivo de inicialização do shell, o que para bash é ~/.bashrc; encontre a linha em que ele define o PS1, que é sua sequência de prompt, e modifique-a conforme descrito na resposta. O que mudar depende de como sua sequência de caracteres é configurada, mas a maioria dos detalhes destacados está na minha resposta, e o restante pode ser encontrado pesquisando um pouco no Google. Não sei ao certo o que você quer dizer com "existe uma maneira de manter a última igual à cor anterior?"
Aaron Miller
7

Você pode passar a saída para um programa que faz a coloração. Por exemplo, existem programas como pycolor:

pycolor module.py

Para criar seu próprio:

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

Mais sobre saída em cores.

l0b0
fonte
3

Sim, eu tenho esse trabalho para bash, no Linux e Mac OS, pelo menos.

Primeiro, defina algumas variáveis ​​de atributo e o prompt PS1 para deixar o terminal definido com os atributos de linha de comando desejados, por exemplo:

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

Em seguida, use a armadilha bash DEBUG, que é executada imediatamente antes de cada comando, para alterar os atributos de texto para a saída do comando:

trap 'echo -ne "${none}"' DEBUG
jackpipe
fonte
1

Outra alternativa (comando por comando) é o grc - generic colorizer. É preciso um pouco de trabalho para configurar as expressões regulares usadas para colorir as coisas. Eu descobri sobre isso aqui:

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

e aqui:

/unix/26313/colored-find-output

Eu não sou um flash com expressões regulares, então não trabalhei muito com esses comandos.

Joe
fonte
Eu uso isso com todos os meus scripts de tail-log. Maravilhoso.
stefgosselin
1

Jogue-os no seu arquivo .bashrc e, em seguida, origine o arquivo após salvar.

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

Uma vez feito isso, você poderá usá-los permanentemente em seu terminal ou até comentar as variáveis ​​ou excluí-las completamente. Você pode usá-los em scripts em sua máquina ou com substituição de comando ou o que for. Aqui está um exemplo a seguir de como eu os uso pessoalmente:

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

Normalmente, eu os uso com comandos individuais echoe / ou individuais, printfmas você pode usá-los para colorir outros comandos, como o pingcomando. Adicione o seguinte .bashrcpara obter os efeitos. Em seguida, forneça seu .bashrcarquivo e execute o cpingcomando para usar pingcom texto roxo. Você pode definir cada função de comando para usar qualquer cor que seu terminal suporte.

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

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

alias cping='colored_ping'

Então tente:

user@linux:~# cping superuser.com

Sua saída para cpingserá roxa. Se você quiser usar várias cores na mesma saída, poderá adicioná-las de maneiras exclusivas. Como você faz isso é totalmente com você. Por exemplo:

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

Você deve dar uma olhada no comando hl disponível no git hub:
github: git clone http://github.com/mbornet-hl/hl
e em:
http://www.flashnux.com/notes/page_000022_US.html
hl é um comando linux escrito em C, especialmente projetado para colorir um arquivo de texto ou a saída de um comando. Você pode usar até 42 cores simultaneamente e usar um arquivo de configuração para simplificar as linhas de comando. Você pode colorir a saída de cada comando que pode ser canalizado para outro. E se você souber o que são expressões regulares, será muito fácil usá-lo. Você pode usar a página de manual para entender como usá-lo.

arbusto
fonte