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


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.


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.


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

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.


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}

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.