
eu editeio padrão/etc/update-motd.d/00-header
, adicionando um pouco de cor para facilitar a leitura:
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)"
Posso executar essa linha de código perfeitamente em um terminal, mas quando edito 00-header
com essas informações, recebo os códigos de escape impressos em texto simples:
Welcome to \e[1;36mUbuntu 13.10\e[0m \e[2m(GNU/Linux 3.11.0-23-generic i686)\e[0m
Como posso adicionar um toque de cor à mensagem do dia?
Responder1
Supondo que você esteja no Ubuntu - que usa dash para executar scripts do sistema:
Esse arquivo, /etc/update-motd.d/00-header
, é executado por/bin/dash
, (não /bin/bash
,) que é bastante minimalista (e rápido) -
parece não suportar o"\e"neste lugar - use"\033"em vez de.
É diferente quando expandir os códigos de escape.
Responder2
No Debian/Ubuntu o motd
está configurado em /etc/pam.d/sshd
:
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
o que significa que após o login bem-sucedido, o sistema executará algo como:
cat /run/motd.dynamic
if [[ -f /etc/motd ]]; then cat /etc/motd; fi
onde /etc/motd
está a parte estática (apenas impressa, não de origem).
Debian 9/Ubuntu 16.04:
Para gerar a parte dinâmica run-parts
é usado para /etc/update-motd.d
diretório:
/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 um código um pouco mais legível você pode usar tput setaf {color number}
. Observe que para preservar as cores temos que definir TERM
variável.
#!/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)"
salve o arquivo como, por exemplo/etc/update-motd.d/10-uname
e certifique-se de que seja executável:
chmod +x /etc/update-motd.d/10-uname
As cores básicas são numeradas:
- 1 – Vermelho
- 2 – Verde
- 3 – Amarelo
- 4 – Azul
- 5 – Magenta
- 6 – Ciano
- 7 – Branco
Dependendo do seu gosto, você pode produzir resultados mais coloridos usando lolcat
ou títulos de figlet
. A saída gerada usa sintaxe bash padrão:
^[(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
A parte dinâmica é atualizada usando /etc/init.d/motd start
o seguinte:
uname -snrvm > /var/run/motd.dynamic
Responder3
Insira um <ESC>
caractere de escape ANSI antes do código de cores. Se você estiver usando o Vim, pressione Ctrl+K ESC
ou Ctrl+v+[
no modo de edição.
^[
Em seguida, escreva o código de cores desejado. Por exemplo, deixe o primeiro plano vermelho[31m
^[[31mHello! Glad to see you again^[[0m
O início ^[
deve ser um indicador de que existe um caractere de escape e [31m
os caracteres reais digitados manualmente.