Tous les outils

Dev

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.

Mis à jour le:

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 $- contient i, le shell est interactif.
  • Le EOF final 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 exemple figlet -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.