Avant-propos
J'ai déjà publié un petit journal sur cette bibliothèque : linuxfr.org/users/seraf1/journaux/args-parser-pour-shell.
Depuis, le dépôt a déménagé sur Codeberg, et il y a eu quelques petites modifications.
Présentation
Auxilium
est une bibliothèque (compatible POSIX) de fonctions pour les scripts Shell, conçue pour simplifier l'analyse des arguments en ligne de commande et la génération automatique de messages d'aide (--help
). Elle offre une méthode structurée pour définir des options, des arguments positionnels, des valeurs par défaut, des listes de choix et des fonctions de rappel, tout en prenant en charge la génération de scripts d'auto-complétion.
Ce script n'est pas destiné à être exécuté directement, mais à être "sourcé" (inclus) dans vos propres scripts shell.
Pourquoi utiliser Auxilium.sh ?
Si vous écrivez régulièrement des scripts shell, vous savez que la gestion des arguments peut rapidement devenir complexe et fastidieuse. auxilium.sh
s'occupe de cette complexité pour vous, vous permettant de vous concentrer sur la logique principale de votre script.
Fonctionnalités principales
- Définition facile des arguments : Ajoutez des arguments avec des noms longs (
--arg
) et des options courtes (-a
). - Types d'arguments variés : Supporte les chaînes de caractères (
str
), les options binaires (opt
) et les arguments positionnels (positional
).. - Valeurs par défaut : Définissez des valeurs par défaut pour vos arguments.
- Listes de choix : Limitez les valeurs possibles pour un argument à une liste prédéfinie.
- Fonctions de rappel (Callbacks) : Exécutez une fonction spécifique lorsqu'un argument est rencontré ou une fois qu'il est analysé.
- Gestion des arguments restants : Capturez tous les arguments restants après un argument spécifique.
- Génération automatique de l'aide (
--help
) : Créez automatiquement un message d'aide détaillé affichant toutes les options, leurs descriptions, les valeurs par défaut et les choix possibles. - Génération d'auto-complétion : Générez des scripts d'auto-complétion pour Bash et Zsh.
- Nettoyage automatique : Supprime les fichiers temporaires créés par l'utilitaire.
Exemple d'utilisation
Voici un exemple simple pour illustrer comment utiliser Auxilium
dans votre propre script :
#!/bin/sh
# Assurez-vous que auxilium.sh est accessible
# Remplacez /chemin/vers/auxilium.sh par le chemin réel
. /usr/share/auxilium/auxilium.sh
# --- 1. Initialisation de l'application ---
auxilium_init "mon_app" -m "Une application d'exemple pour démontrer Auxilium."
# --- 2. Ajout des arguments ---
auxilium_add "fichier_config" -s c -t str -m "Chemin vers le fichier de configuration." -d "/etc/mon_app/config.conf"
auxilium_add "verbeux" -s v -t opt -m "Activer le mode verbeux."
auxilium_add "action" -s a -t str -l "demarrer|arreter|redemarrer" -m "Action à exécuter." -d "demarrer"
auxilium_add "cible" -t positional -m "Cible de l'opération (argument requis)."
# --- 3. Analyse des arguments ---
auxilium_parse "$@"
# --- 4. Accès aux valeurs des arguments ---
echo "Fichier de configuration : ${AUXILIUM_ARG_FICHIER_CONFIG}"
echo "Action à effectuer : ${AUXILIUM_ARG_ACTION}"
if [ "${AUXILIUM_ARG_VERBEUX}" = "1" ]; then
echo "Mode verbeux activé."
fi
if [ -n "${AUXILIUM_ARG_CIBLE}" ]; then
echo "Cible de l'opération : ${AUXILIUM_ARG_CIBLE}"
else
echo "Erreur : Une cible est requise."
auxilium_usage # Affiche l'aide si un argument positionnel requis est manquant
exit 1
fi
# --- 5. Nettoyage des fichiers temporaires ---
auxilium_close
Contribuer
Les contributions sont les bienvenues ! N'hésitez pas à forker le dépôt, proposer des améliorations, signaler des bugs ou soumettre des pull requests.
Licence
Ce script est distribué sous la licence Apache 2.0. Consultez le fichier debian/copyright
pour plus de détails.
Développé par Philippe SÉRAPHIN
Site web : auxilium.spn109.fr
Dépôt GIT : codeberg.org/spn109/auxilium
# Fichiers temporaires
Posté par Christophe . Évalué à 5 (+3/-0).
Ça a l'air sympa !
Mais je suis un peu déçu qu'il y ait besoin de créer des fichiers temporaires juste pour ça. Du coup il faut faire très attention à la façon dont le shell se termine, sinon on risque de laisser des traces derrières. N'y a-t-il pas moyen de s'en passer ?
[^] # Re: Fichiers temporaires
Posté par seraf1 (site web personnel) . Évalué à 3 (+2/-0).
Si l'on veut rester compatible POSIX, il n'y a pas vraiment moyen de s'en passer malheureusement.
[^] # Re: Fichiers temporaires
Posté par gUI (Mastodon) . Évalué à 4 (+1/-0).
Au passage, bravo pour ce tour de force !
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Fichiers temporaires
Posté par seraf1 (site web personnel) . Évalué à 3 (+2/-0).
Merci à Shellcheck pour ça
[^] # Re: Fichiers temporaires
Posté par bnurb . Évalué à 2 (+1/-0). Dernière modification le 23 juillet 2025 à 10:12.
Il y a moyen, avec des variables, de la même manière que tes arguments sont définis. Par exemple:
source.sh
:test.sh
:# quid novis?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3 (+2/-1).
Pour les personnes ayant lu et participé au précédent journal, il aurait été bien d’indiquer les nouveautés et les futures fonctionnalités prévues.
Je profite de ce commentaire pour demander de nous parler aussi de l’histoire (comment et pourquoi est née l’idée, d’où est puisé la motivation) et de l’histoire (difficultés rencontrées, retours d’expérience d’un développement conséquent en shell, etc.)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: quid novis?
Posté par seraf1 (site web personnel) . Évalué à 8 (+7/-0).
[^] # Re: quid novis?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2 (+0/-0).
Oh oui, SC3030 …avec parfois de géniales contorsions :D J’avais vu que quelqu’un s’était fait une bibliothèque sympa…
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: quid novis?
Posté par seraf1 (site web personnel) . Évalué à 3 (+2/-0).
Je ne connaissais pas et je viens de regarder un peu.
Plutôt que de passer par des fichiers temporaires, il passe par des
eval
à profusion, c'est une autre façon de faire qui me fait un peu peur au point de vu de la sécurité.[^] # Re: quid novis?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 6 (+4/-0).
Oui, les
eval
c’est quelque chose de délicat et on n’est jamais sûr de bien faire… Le passage par fichier est plus simple et plus sécure si on se repose surmktemp
…En général quand je ne peux me passer de tableaux associatifs c’est signe qu’il ne faut pas que j’écrive mon truc en shell :)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: quid novis?
Posté par Sytoka Modon (site web personnel) . Évalué à 2 (+0/-0).
Si tu regardes la commande module, c'est une fonction bash (pas le choix si on veut modifier le shell courant) qui fait un eval du résultat de la commande modulecmd. Cette dernière est programmée historiquement en TCL.
Bref, tu peux tes traitements par exemple en Perl et faire un eval du résultat dans ta fonction Bash. J'ai dis Perl car très stable et c'est quasiment partout…
[^] # Re: quid novis?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 4 (+2/-0).
Je fais souvent du AWK ou du PERL en standalone ou intégré dans mes scripts shell.
Les nouvelles générations ne connaissent hélas pas.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: quid novis?
Posté par Voltairine . Évalué à 2 (+1/-1). Dernière modification le 19 juillet 2025 à 17:12.
Je ne comprends pas l'argument du boot avec Dash pour justifier d’écrire un script compatible POSIX. Si le bang précise qu'il faut utiliser bash (
#!/usr/bin/bash
), le script sera bine exécuté par Bash.[^] # Re: quid novis?
Posté par BAud (site web personnel) . Évalué à 4 (+2/-0).
si bash n'est pas disponible :D par exemple, pour de l'embarqué (genre openwrt — en tout cas à une époque) où tu n'as pas toutes les possibilités. Sur l'OpenBSD pour ton grille-pain, tu n'auras peut-être pas bash…
[^] # Re: quid novis?
Posté par Voltairine . Évalué à 3 (+1/-0).
Là je suis bien d'accord. Mais ici nous sommes dans le contexte d'un script interactif sur une Debian et la justification était que le shell par défaut était Dash.
[^] # Re: quid novis?
Posté par seraf1 (site web personnel) . Évalué à 1 (+0/-0).
Le script n'est pas forcément interactif, il peut s'agir de scripts dont l'installation nécessitent la génération des fichiers de complétion. Dans ce cas, le shebang ne sera pas utilisé (appel de dash -c pour Debian par exemple)
[^] # Re: quid novis?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3 (+1/-0).
Ça peut dépendre aussi de ton parc. J’ai déjà travaillé dans des environnements où tu n’as pas
/bin/bash
partout… Et l’année dernière j’ai du faire un script pour une structure où il y a du bash partout mais je me suis retrouvé à me battre avec pléthore de versions (développement initialement fait pour la v5 et puis on a découvert qu’il y a beaucoup de v4 et pas mal de v3.0 à 3.3 : j’aurais gagné plus de temps à faire un script POSIX —on en était plus loin à la fin) :D“It is seldom that liberty of any kind is lost all at once.” ― David Hume
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.