Linux Fu : gommez votre script

Nous écrivons souvent des scripts bash rapides et à en juger par les commentaires, la moitié d’entre nous utilise bash ou un shell similaire pour afficher des scripts rapides et utiles, et la moitié d’entre nous pense que c’est une abomination, et vous ne devriez utiliser bash que pour votre ligne de commande et votre recours à quelque chose qui ressemble plus à une langue traditionnelle pour faire autre chose. Si vous êtes dans l’ancien camp, vous maudissez probablement votre allégeance lorsque vous avez besoin de rendre vos scripts bash plus interactifs.

La gomme peut aider. C’est un utilitaire qui peut gérer l’entrée et la sortie de votre script avec un peu de flair tout en ne nécessitant presque aucun effort de votre part.

La commande semble simple, mais elle comporte douze sous-commandes, chacune avec une myriade d’options. Mais vous pouvez décomposer les fonctions en quelques catégories simples. Les commandes d’entrée vous permettent de demander une ligne d’entrée ou un groupe de lignes d’entrée. Vous pouvez également créer une liste de sélection ou une invite de type oui/non. Il y a aussi un sélecteur de fichiers et un filtre, un peu comme fzf.

Les commandes de sortie vous permettent d’afficher le démarquage, le code et les tables. Vous pouvez rendre la sortie agréable avec des bordures et des couleurs. Il y a un téléavertisseur pour les sorties longues et un spinner pour montrer que quelque chose se passe. Vous pouvez également utiliser des chaînes de modèle avec différents espaces réservés.

En pratique

Le fichier de démonstration de gomme en action

Peut-être que la meilleure façon de voir le genre de choses que la gomme peut faire est de regarder la petite démo animée de la page du projet et de lire le code source associé.

Tout est une sous-commande de l’exécutable principal de la gomme : choisir, confirmer, fichier, filtrer, formater, saisir, joindre, pager, tourner, styler, tabler et écrire. Vous pouvez deviner ce que font la plupart d’entre eux, mais quelques-uns sont moins évidents. Le chewing-gum à lui seul vous donnera un petit rappel :

Commands:
choose Choose an option from a list of choices
confirm Ask a user to confirm an action
file Pick a file from a folder
filter Filter items from a list
format Format a string using a template
input Prompt for some input
join Join text vertically or horizontally
pager Scroll through a file
spin Display spinner while running a command
style Apply coloring, borders, spacing to text
table Render a table of data
write Prompt for long-form text

Vous pouvez obtenir plus d’aide en choisissant une commande et en ajoutant –help. La commande de jointure colle le texte avec l’alignement et fonctionne même si le texte comporte plus d’une ligne. La commande d’écriture accepte les entrées multilignes. L’un des exemples, par exemple, l’utilise pour rassembler un message de validation Git.

Si vous parcourez le script, vous remarquerez peut-être que vous pouvez utiliser des numéros de couleur de style HTML comme :

echo "Do you like $(gum style -- foreground "#04b575" "Bubble Gum?")"

Notez que les zéros non significatifs ne sont pas facultatifs. Pour autant que je sache, cependant, il n’accepte pas les couleurs nommées, ce qui serait pratique. Bien sûr, vous pouvez toujours faire quelque chose comme :

RED="#ff0000"
FG=$RED
gum style --foreground $FG Alert!

Installer

Selon la page GitHub du projet, de nombreuses distributions connaissent déjà la gomme, vous pouvez donc l’installer à l’aide de votre gestionnaire de packages habituel. J’ai utilisé Neon, j’ai donc dû suivre les instructions de Debian pour l’obtenir, mais ce n’est pas du tout difficile à faire. Vous pouvez également télécharger des fichiers binaires ou des packages prédéfinis. Le programme est écrit en go, donc vous pouvez aussi utiliser go pour l’installer.

Un exemple plus pratique

L’une de mes façons préférées d’apprendre un nouveau langage est d’écrire un programme simple pour que l’ordinateur devine votre numéro dans un jeu haut-bas en utilisant un algorithme de recherche binaire. Si le nombre que vous choisissez est compris entre 1 et 1000, le programme devinera 500. Si vous dites à l’ordinateur que le nombre est trop élevé, il devinera 250 la prochaine fois. Si 500 était trop bas, il devinerait 750. Vous voyez l’idée.

Essaye le. Pour un script shell, c’est raisonnablement attrayant, et je ne suis pas connu pour mes sensibilités en matière de conception esthétique. Je suis sûr que vous pouvez faire mieux, mais le fait est que les outils ont rendu relativement facile la création des invites et la sortie bien formatée. Je n’ai même pas gratté la capacité de gérer le démarquage ou les tables. Vous remarquerez cependant que quelque chose semble s’être cassé récemment avec la coloration syntaxique des fichiers source.

Marcher et mâcher de la gomme

Nous aimons la facilité d’utilisation de la gomme. Nous avons remarqué quelques bizarreries. Le texte en gras ne fonctionnait pas dans Konsole, du moins pas la façon dont le nôtre est configuré, puisque la couleur de premier plan « intense » a été définie pour être la même que la couleur normale. Ce n’est pas vraiment la faute de la gomme, mais cela signifie que vous ne pouvez pas compter sur l’utilisateur pour avoir une configuration qui affichera toutes vos jolies mises en page.

La sous-commande format a un fichier readme dans son sous-répertoire. (C’est d’ailleurs le seul.) Vous y trouverez quelques informations qui pourraient vous aider. Par exemple, le formatage du démarquage, du code et des emojis est en fait effectué par quelque chose appelé Glamour, donc la lecture de sa documentation peut être utile. Chroma gère finalement le formatage du code source. En particulier, jusqu’à ce que nous ayons lu les documents Chroma, nous ne savions pas comment le formatage du code identifiait les langages ou lesquels pouvaient être pris en charge. Lire sur Glamour et Lipgloss aidera également à expliquer les thèmes, l’assemblage et les couleurs. Cela ne fait pas de mal de lire une partie du code go aussi.

Pourtant, avec une courbe d’apprentissage légère, vous pouvez créer ou réadapter des scripts pour qu’ils soient plus conviviaux et attrayants rapidement, même s’ils ne vont pas s’exécuter sous une interface graphique. Dans le répertoire des exemples, vous pouvez même voir comment incorporer de la gomme dans des choses comme Python ou Ruby.

Bien sûr, il existe des outils comme la boîte de dialogue, et pour des scripts plus avancés, vous pourriez en avoir besoin. Mais pour un moment unique qui a juste besoin d’un peu de piquant, pensez à la gomme. Si vous allez écrire du bash sérieux, pensez à certains pièges. Vous pourriez même envisager de passer par la vérification du shell plutôt que par la vérification orthographique.

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.