Color diferente para comando y salida

13

Me preguntaba si es posible cambiar el color de la salida de un comando en Linux a un color diferente al de la línea de comando donde escribo. Es monótono y difícil de encontrar dónde comienza la salida. me gusta,

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

Gracias

raj
fuente
2
tal vez usando precmd_functions podría cambiar el color del indicador y configurarlo antes de preexec_functions, o algo así. (en zsh, no sé si hay un equivalente para otras conchas)
pataluc
acabo de probar mi sugerencia pero no obtengo el color del comando ... :(
pataluc
1
@pataluc: tuve éxito con preexec () { echo -n "\\e[40;34m" }; la precmdfunción es en mi humilde opinión no es necesario, parece zsh restablece el color en sí antes de mostrar el mensaje. Pero eso funciona solo para aquellos comandos que no alterarán el color en sí (el ejemplo más destacado es ls) como lo señaló Aaron. Con cat, bc, incorporado comandos shell, etc. (incluso alpine) esto funciona bien.
mpy
@mpy también tuve éxito, con todos los comandos, suponiendo que raj quiere colorear el comando y no el resultado, agregué "\\e[40;34m"al final de mi PROMPTvar y lo preexec () { echo -n "\\e[40;37m" }
puse de
1
@pataluc: Lo siento, ahora entiendo. Para colorear la línea de comando, simplemente utilícela zle_highlight=(default:fg=cyan)con una versión reciente de zsh. Zsh también ofrece coloración dinámica, como fish; vea la sección DESTACADO DE CARÁCTER en man zshzle.
mpy

Respuestas:

5

Realmente no; El color de la salida de un programa determinado es controlado por el comando, no por el terminal.

Dicho esto, suponiendo que su terminal entienda los códigos de escape ANSI para el color (la mayoría lo hace), puede usar los códigos de escape para establecer el color de aviso deseado al comienzo del aviso y el color de salida deseado al final; esto daría como resultado que sus líneas de comando también estén en el color que establezca para la salida, pero probablemente sea lo más cerca que esté de lo que está buscando. Por ejemplo, lo siguiente:

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

le dará un aviso que se verá así:

user@host:wd $ _

con 'user' y 'host' en morado, 'wd' (su cwd) en marrón (amarillo oscuro), y todo después de '$' en lo que su terminal use para azul claro. (Un xterm predeterminado lo mostrará en cian; gnome-terminal parece tener un tono bastante agradable de azul aciano).

El código de color real, como se especifica en el formato necesario para bash, es, por ejemplo \[\033[00;35m\], dónde 00;35está la especificación de color real; el líder 00rara vez cambia, pero puede producir efectos IIRC en negrita (01), subrayado (??) y video inverso (??), mientras que el '35' final es el color real, que en este caso es el púrpura.

Es sorprendentemente difícil encontrar una lista decente de códigos de color ANSI, pero los colores de primer plano van del 30 al 37 y los de fondo del 40 al 47, de la siguiente manera:

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

Tenga en cuenta que, dado que está configurando un color predeterminado para todo lo que sigue a su solicitud, los programas que ejecuta que no establecen sus propios colores a través de códigos de escape tomarán ese color, por ejemplo, si ejecuta un localizador, es probable que vea su salida en el mismo color que ha configurado para otros comandos. Mientras tanto, los comandos, que no establecen sus propios colores a través de códigos de escape ignorarán sus esfuerzos por completo.

Aaron Miller
fuente
1
En lugar de códigos de escape, descubrí que usar tputes mucho más legible para colorear. Por ejemplo, mi mensaje (en bash) es el export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "que muestra la hora, luego el nombre de usuario en un color, @en otro y el nombre de host en un tercero (rojo, blanco y azul en este momento), luego imprime el PWD y $ . Es muy fácil ver de un vistazo dónde están las líneas de aviso cuando se retrocede por el historial.
MattDMo
eres increíble ... eso es todo lo que siempre quise. Gracias, ¿podría decirme qué valores cambiar si alguna vez quiero cambiar los colores?
raj
¿Y hay alguna manera de mantener el último igual que el color anterior?
raj
y por qué no es el permenant cambio, cada vez que me conecto, tengo que el color de nuevo
Raj
1
El cambio no es permanente a menos que lo agregue al archivo de inicialización de su shell, que es para bash ~/.bashrc; encuentre la línea donde establece PS1, que es su cadena de solicitud, y modifíquela como se describe en la respuesta. Lo que debe cambiar depende de cómo esté configurada su cadena de solicitud, pero la mayoría de los detalles más destacados están en mi respuesta, y el resto se puede encontrar buscando en Google. No estoy seguro de lo que quieres decir con "¿hay alguna manera de mantener el último igual que el color anterior?"
Aaron Miller
7

Puede pasar la salida a un programa que hace el coloreado. Por ejemplo, hay programas como pycolor:

pycolor module.py

Para construir el tuyo:

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

Más sobre salida de color.

l0b0
fuente
3

Sí, tengo esto funcionando para bash, en linux y mac OS al menos.

Primero, configure algunas variables de atributo, y la solicitud de PS1 para dejar el terminal configurado con los atributos de línea de comandos deseados, por ejemplo:

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

Luego, use la trampa bash DEBUG, que se ejecuta justo antes de cada comando, para cambiar los atributos de texto para la salida del comando:

trap 'echo -ne "${none}"' DEBUG
gaita
fuente
1

Otra alternativa (comando por comando) es grc - colorizer genérico. Se necesita un poco de trabajo para configurar las expresiones regulares que usa para colorear las cosas. Lo descubrí aquí:

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

y aquí:

/unix/26313/colored-find-output

No soy un flash con expresiones regulares, así que no he trabajado mucho con estos comandos.

Joe
fuente
Lo uso con todos mis scripts de registro de cola. Maravilloso.
stefgosselin
1

Tírelos en su archivo .bashrc y luego obtenga el archivo después de guardarlo.

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

Una vez hecho esto, puede usar cualquiera de estos en su terminal de forma permanente o hasta que comente las variables o las elimine por completo. Puede usarlos en scripts en su máquina o con sustitución de comandos o lo que sea. Aquí hay un siguiente ejemplo de cómo los uso personalmente:

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

Usualmente los uso con comandos individuales echoy / o printfcomandos, pero puede usarlos para colorear otros comandos, como el pingcomando. Agregue lo siguiente .bashrcpara obtener los efectos. Luego busca tu .bashrcarchivo y ejecuta el cpingcomando para usar pingcon texto morado. Puede configurar cada función de comando para usar cualquier color que admita su terminal.

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

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

alias cping='colored_ping'

Entonces intenta:

user@linux:~# cping superuser.com

Su salida para cpingserá púrpura. Si desea utilizar varios colores en la misma salida, puede agregarlos de formas únicas. Cómo lo haces depende completamente de ti. Por ejemplo:

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

Debe echar un vistazo al comando hl disponible en git hub:
github: git clone http://github.com/mbornet-hl/hl
y en:
http://www.flashnux.com/notes/page_000022_US.html
hl es un comando de Linux escrito en C, especialmente diseñado para colorear un archivo de texto o la salida de un comando. Puede usar hasta 42 colores simultáneamente y usar un archivo de configuración para simplificar las líneas de comando. Puede colorear la salida de cada comando que se puede canalizar a otro. Y si sabe qué son las expresiones regulares, será muy fácil de usar. Puede usar la página de manual para comprender cómo usarla.

Arbusto
fuente