Générateur de prompt bash (PS1)

Composez l’invite de votre terminal morceau par morceau : utilisateur, machine, dossier, heure, branche Git, chacun dans sa couleur. L’outil écrit le bloc pour la fin de ~/.bashrc, avec les codes de couleur correctement entourés de \[ \].

Morceaux, dans l’ordre

    Options
    Aperçu
    
        

    Valeurs d’exemple ; les teintes des 16 couleurs dépendent du thème de votre terminal.

    Pour la fin de ~/.bashrc
    
        

    Pour essayer sans rien modifier : collez le bloc directement dans un terminal. Fermer le terminal l’annule. Pour le garder, ajoutez-le à la fin de ~/.bashrc (sous macOS, ~/.bash_profile), puis source ~/.bashrc.

    Bon à savoir

    \[ … \]
    Disent à bash que ce qu’ils entourent n’affiche rien. Sans eux, bash compte mal la largeur de l’invite, et les longues commandes se réécrivent sur elles-mêmes. L’outil les place autour de chaque code de couleur.
    $(__rno_git)
    Le morceau « branche Git » lance git avant chaque invite. Instantané dans un dépôt ordinaire ; dans un dépôt énorme ou sur un disque réseau lent, cela peut se sentir.
    PROMPT_COMMAND
    Le morceau « code de retour » place une petite fonction en tête de PROMPT_COMMAND, pour saisir le code avant que quoi que ce soit d’autre ne s’exécute. Il garde ce qui s’y trouve déjà, et ne s’ajoute pas deux fois si ~/.bashrc est relu.
    zsh
    macOS utilise zsh par défaut depuis 2019 : il ignore un PS1 écrit pour bash (ses codes sont %n, %m, %~). Cet outil ne vaut que pour bash.

    Transparence

    Le prompt est composé dans votre navigateur, par les scripts listés ci-dessous. Rien de ce que vous choisissez ne quitte cette page.

    Garanti par votre navigateur
    La politique de sécurité du contenu (CSP) de cette page n’autorise qu’une destination, la mesure d’audience du site (connect-src https://stats.r-no.fr, voir plus bas), et interdit tout envoi de formulaire (form-action 'none') : même un bogue ne pourrait envoyer nulle part ce que vous saisissez. Vous pouvez lire cette politique en haut du code source de la page.
    Mesure d’audience
    Comme toutes les pages du site, celle-ci compte sa visite avec Umami, installé sur le serveur de R-no lui-même (stats.r-no.fr). Il reçoit l’adresse de la page, sans paramètres ni ancre, le site d’où vous venez (son nom de domaine seulement), votre navigateur, votre système, votre langue et la taille de votre écran, ainsi que le pays, la région et la ville déduits de votre adresse IP, qui n’est pas conservée. Il ne reçoit jamais ce que vous saisissez, ni le résultat de l’outil. Aucun cookie, rien d’enregistré dans votre navigateur ; si votre navigateur demande à ne pas être suivi (Do Not Track), rien n’est mesuré. Les données sont effacées au bout de 25 mois.
    • /commun/mesure.js : le filtre appliqué avant chaque envoi, écrit pour R-no Toolbox. 1.4 kB
      SHA-256 225eec74fd12623d82fc05ee7d222be629ce454d081c129e8d1e249ed37ee716
    • https://stats.r-no.fr/m.js : le script de suivi d’Umami, libre (MIT), servi par le serveur de mesure. Son empreinte n’est pas affichée ici : elle change à chaque version d’Umami, et vous ne pouvez pas vérifier depuis votre navigateur qu’il s’agit du code publié. Pour cette partie, il faut faire confiance à R-no.
    Ce qui est conservé
    Aucun cookie, et rien dans l’adresse. Ce que vous saisissez n’est jamais conservé : tout disparaît quand vous rechargez ou fermez la page. La langue est donnée par l’adresse elle-même (/en/ ou /fr/) : rien n’est conservé pour s’en souvenir. Comme tout site web, le serveur note le téléchargement de la page et de ses fichiers dans ses journaux d’accès (adresse IP, date et heure, adresse demandée, nom du navigateur). Il ne reçoit jamais ce que vous saisissez.
    Le code qui s’exécute ici
    • app.js: la composition du prompt et son aperçu, écrits pour R-no Toolbox. Non minifié, sans bibliothèque tierce. 18.0 kB
      SHA-256 058fe99a8c7c171a5379d3e435d76e87a5cef89386600d644e84fccc99276375
    • textes.js: les messages en français de l’outil, affichés par son script (le reste de la page française est écrit dans son HTML à la construction du site). Il ne fait que définir des textes, sans aucune logique. 8.5 kB
      SHA-256 680bc47675e7884ab3e2a97deb7352a1ab72610881f00dfbe600488c96c5f456
    • /commun/langue.js: l’aide à la traduction, la même sur toutes les pages du site. Elle lit la langue de la page et donne à l’outil ses messages dans cette langue. Elle ne conserve rien. 1.6 kB
      SHA-256 80f76f69773ef628d36d09bf8387cfedebda4529210d7120649b6f5603310631
    Avant de coller
    Cette page ne fait qu’écrire du texte : elle n’exécute rien, ni ici ni sur votre machine. Ce que vous collez dans un terminal ou un fichier de configuration s’exécute avec vos droits : relisez-le d’abord. Le code qu’elle écrit ne télécharge rien et n’appelle aucun service extérieur.
    Comment c’est vérifié
    Chaque modèle, et un morceau de texte plein de $, `, \ et de guillemets, a été chargé dans bash 5.2 et rendu avec ${PS1@P} : le texte visible est celui de l’aperçu, et chaque séquence d’échappement est bien entre \[ \]. Les blocs passent ShellCheck.
    Vérifiez vous-même
    Téléchargez un script et comparez son empreinte avec celle affichée ci-dessus :
    curl -s https://r-no.fr/bash/ps1/app.js | shasum -a 256
    Limites
    Bash seulement (pas zsh, fish ni sh). L’aperçu utilise des valeurs d’exemple et les teintes de xterm. Le morceau « branche Git » demande git sur la machine ; le morceau « code de retour » passe par PROMPT_COMMAND : gardez le bloc après toute ligne de ~/.bashrc qui le remplace. Les 16 couleurs de base seulement ; pour les autres, voir bash/colors.