
yo editéel valor por defecto/etc/update-motd.d/00-header
, agregando algo de color para que sea más fácil de leer:
printf "Welcome to \e[1;34m%s\e[0m \e[2m(%s %s %s)\e[0m\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"
Puedo ejecutar esa línea de código perfectamente en una terminal, pero cuando edito 00-header
con esta información, obtengo los códigos de escape impresos en texto sin formato:
Welcome to \e[1;36mUbuntu 13.10\e[0m \e[2m(GNU/Linux 3.11.0-23-generic i686)\e[0m
¿Cómo puedo añadir un toque de color al mensaje del día?
Respuesta1
Suponiendo que estás en Ubuntu, que usa el guión para ejecutar scripts del sistema:
Ese archivo, /etc/update-motd.d/00-header
es ejecutado por/bin/dash
, (no /bin/bash
,) que es bastante minimalista (y rápido);
parece no ser compatible con"\mi"en este lugar - uso"\033"en cambio.
Es diferente cuándo expandir los códigos de escape.
Respuesta2
En Debian/Ubuntu motd
está configurado en /etc/pam.d/sshd
:
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
lo que significa que al iniciar sesión exitosamente el sistema ejecutará algo como:
cat /run/motd.dynamic
if [[ -f /etc/motd ]]; then cat /etc/motd; fi
¿Dónde /etc/motd
está la parte estática (solo impresa, no obtenida)?
Debian 9/Ubuntu 16.04:
Para generar la parte dinámica run-parts
se utiliza para /etc/update-motd.d
el directorio:
/usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d
Para obtener un código ligeramente más legible, puede utilizar tput setaf {color number}
. Tenga en cuenta que para conservar los colores tenemos que establecer TERM
una variable.
#!/bin/sh
export TERM=xterm-256color
read one five fifteen rest < /proc/loadavg
echo "$(tput setaf 2)
Kernel: `uname -v | awk -v OFS=' ' '{print $4, $5}'`
$(tput setaf 4)Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
$(tput setaf 5)
______________
< Hello World! >
--------------
\\ ^__^
\\ (oo)\\_______
(__)\\ )\\\/\\
||----w |
|| ||
$(tput sgr0)"
guarde el archivo como, por ejemplo/etc/update-motd.d/10-uname
y asegúrese de que sea ejecutable:
chmod +x /etc/update-motd.d/10-uname
Los colores básicos están numerados:
- 1 – rojo
- 2 – Verde
- 3 – Amarillo
- 4 – Azul
- 5 – Magenta
- 6 – cian
- 7 – Blanco
Dependiendo de sus gustos, puede producir resultados más coloridos utilizando lolcat
o títulos de figlet
. La salida generada utiliza la sintaxis estándar de bash:
^[(B^[[m
^[[32m
Kernel: 4.9.65-3+deb9u2 (2018-01-04)
^[[34mLoad Averages......: 0.04, 0.05, 0.05 (1, 5, 15 min)
^[[35m
______________
< Hello World! >
--------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
^[(B^[[m
Debian 8/Ubuntu 14.04
La parte dinámica se actualiza usando /etc/init.d/motd start
el siguiente comando:
uname -snrvm > /var/run/motd.dynamic
Respuesta3
Inserte un <ESC>
carácter de escape ANSI antes del código de color. Si está utilizando Vim, estaría presionando Ctrl+K ESC
o Ctrl+v+[
en modo de edición.
^[
Luego escribe el código de color que desees. Por ejemplo, que sea rojo en primer plano.[31m
^[[31mHello! Glad to see you again^[[0m
El comienzo ^[
debe ser un indicador de que hay un carácter de escape y [31m
los caracteres reales escritos a mano.