Une bannière ASCII dans votre terminal : bash, zsh, fish, PowerShell et connexion SSH
Utilisez un heredoc entre guillemets ou un fichier pour garder les barres obliques inverses, et n’affichez que dans les shells interactifs pour que scp fonctionne.
Une bannière avec votre nom ou celui de la machine à chaque ouverture du terminal, c’est une jolie touche, et cela indique d’un coup d’œil sur quel ordinateur vous êtes. Ce guide explique comment placer une bannière créée sur lab.ascii dans les fichiers de démarrage de votre shell.
Les exemples utilisent « DEV » dans la police Small. Elle contient des barres obliques inverses (\) : vous verrez tout de suite si elle est abîmée.
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
Deux choses à savoir d’abord
Garder les barres obliques inverses
Si vous affichez une bannière avec echo "...", le shell traite \ et $ comme des caractères spéciaux : des parties de l’art peuvent disparaître ou changer. Utilisez plutôt :
- Un heredoc entre guillemets : mettez le marqueur de fin entre guillemets, comme
cat <<'EOF', et le shell affiche tout exactement tel quel. - Un fichier : enregistrez le résultat avec le bouton TXT et affichez-le avec
cat. Aucun caractère n’a alors besoin d’échappement.
N’afficher que dans les shells interactifs
scp, rsync et sftp lancent un shell sur la machine distante, qui peut lire vos fichiers de démarrage. Si une bannière s’affiche à ce moment-là, les transferts de fichiers peuvent échouer. Affichez la bannière uniquement dans les shells interactifs, ceux qu’une personne a ouverts.
bash : ~/.bashrc
Ajoutez ceci à la fin de ~/.bashrc :
if [[ $- == *i* ]]; then
cat <<'EOF'
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
EOF
fi
- Si
$-contienti, le shell est interactif. - Le
EOFfinal doit commencer en début de ligne. Précédé d’espaces, bash ne le reconnaît pas.
Si vous avez enregistré le fichier TXT sous ~/.banner.txt, une ligne suffit :
[[ $- == *i* && -r ~/.banner.txt ]] && cat ~/.banner.txt
Le shell par défaut de macOS est zsh : sur Mac, utilisez la section zsh ci-dessous.
zsh : ~/.zshrc
zsh ne lit ~/.zshrc que dans les shells interactifs, aucune vérification supplémentaire n’est donc nécessaire. Le même heredoc fonctionne :
cat <<'EOF'
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
EOF
Si vous utilisez Powerlevel10k avec l’instant prompt, un avertissement sur la sortie console au démarrage peut apparaître. Placez le code de la bannière au-dessus du bloc instant prompt, en haut de ~/.zshrc.
fish : fish_greeting
fish exécute la fonction fish_greeting au démarrage pour afficher son message d’accueil. Définissez la vôtre et la bannière remplace le message par défaut. Mettez ceci dans ~/.config/fish/config.fish :
function fish_greeting
cat ~/.banner.txt
end
Dans fish, les chaînes entre apostrophes transforment \\ en un seul \ : afficher un fichier est plus sûr que coller la bannière dans une chaîne.
Ajouter de la couleur
Affichez un code couleur ANSI avant la bannière et un code de réinitialisation après. Dans bash ou zsh :
printf '\033[36m' # cyan
cat ~/.banner.txt
printf '\033[0m' # back to normal
| Code | Couleur |
|---|---|
\033[31m |
Rouge |
\033[32m |
Vert |
\033[33m |
Jaune |
\033[35m |
Magenta |
\033[36m |
Cyan |
\033[1m |
Gras |
Si vous oubliez le \033[0m final, tout ce que vous tapez ensuite reste en couleur.
PowerShell : $PROFILE
PowerShell exécute le fichier $PROFILE au démarrage. S’il n’existe pas encore, créez-le et ouvrez-le dans le Bloc-notes :
if (!(Test-Path $PROFILE)) { New-Item -Path $PROFILE -ItemType File -Force }
notepad $PROFILE
Ajoutez ceci et enregistrez :
$banner = @'
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
'@
Write-Host $banner -ForegroundColor Cyan
- Rien n’est modifié entre
@'et'@. Le'@final doit commencer en début de ligne. - Si une nouvelle fenêtre indique que « l’exécution de scripts est désactivée sur ce système », changez la stratégie d’exécution pour votre utilisateur :
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned. - Les bannières avec des caractères de bloc comme
█ ═ou du texte non latin peuvent se casser dans Windows PowerShell 5.1. Enregistrez le profil en UTF-8 avec BOM dans le Bloc-notes, ou utilisez PowerShell 7.
Écran de connexion SSH : /etc/motd
Sur un serveur Linux, le texte de /etc/motd s’affiche à chaque connexion SSH, pour toutes les personnes qui se connectent.
sudo nano /etc/motd
Collez la bannière, enregistrez, et elle apparaît dès la connexion suivante. Mettre le nom du serveur dans la bannière évite de confondre production et préproduction. Comme vous ne savez pas quel terminal chacun utilise, choisissez une police ASCII comme Standard, Slant ou Small plutôt que des caractères de bloc. Ubuntu affiche aussi les messages générés par les scripts de /etc/update-motd.d/.
Dans votre propre outil CLI
La même règle vaut pour un outil écrit en Python ou Node.js : n’affichez pas la bannière quand la sortie va vers un fichier ou un autre programme.
import sys
BANNER = r"""
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
"""
if sys.stdout.isatty():
print(BANNER)
const banner = String.raw`
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
`;
if (process.stdout.isTTY) console.log(banner);
Le guide de la bannière README détaille l’échappement des chaînes.
Quelle police fonctionne le mieux ?
Les terminaux font généralement 80 colonnes, et beaucoup de gens coupent leur fenêtre en deux : une bannière de 60 colonnes ou moins tient presque partout. Pour les noms longs, choisissez une police étroite comme Small ou Small Slant. Comparez les largeurs dans Choisir une police FIGlet.
Si vous installez le programme
figlet, vous pouvez dessiner une bannière au démarrage avec par exemplefiglet -f slant "$(hostname)". Il doit toutefois être installé sur chaque machine, et les polices non fournies avec lui se téléchargent à part. Coller une bannière toute faite ne demande aucune installation.