Journal Auxilium, il gère enfin les sous-commandes !

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
2
22
août
2025

Sommaire

Voici une mise à jour que j'ai eu du mal à mettre au point, surtout pour la génération de fichiers de complétion pour zsh qui ne gère pas nativement les sous-commandes.

Mais voilà, tout fini par arriver et Auxilium gère enfin les sous-commandes !

Mais tout d'abord, un petit rappel

Auxilium est une bibliothèque shell POSIX complète pour le parsing d'arguments du genre de argparse pour python. Auxilium simplifie la création de scripts shell avec une gestion avancée des paramètres.

Fonctionnalités clés :

  • Compatible POSIX (bash, zsh, dash, ksh)
  • Gestion des sous-commandes
  • Définition simple d'arguments longs et courts
  • Autocomplétion pour Bash et Zsh

Exemple de code et résultats

Script Bash

#!/usr/bin/bash
. /usr/share/auxilium/auxilium.sh

# Callback functions for subcommands
start_callback() {
        echo "Starting service: $2"
}

stop_callback() {
        echo "Stopping service"
}

# Initialize
auxilium_init "myapp" -m "Application with subcommand support"

# Add subcommands
auxilium_add "start" -t subcommand -c start_callback -m "Start the service"
auxilium_add "stop" -t subcommand -c stop_callback -m "Stop the service"
auxilium_add "status" -t subcommand -m "Show service status"

# Add common options
auxilium_add "verbose" -s v -t opt -m "Enable verbose output" -S '*'
auxilium_add "config" -s c -t file -d "/etc/myapp.conf" -m "Configuration file" -S '+'

# Add subcommand-specific arguments
auxilium_add "service_name" -t positional -S start -m "Name of service to start"
auxilium_add "force" -t opt -S stop -m "Force stop"
auxilium_add "log_file" -t file -S start -m "Log file path"

# Parse arguments
auxilium_parse ${@}

# Handle subcommands
case "${AUXILIUM_ARG_SUBCOMMAND}" in
        start)
            echo "Starting service: ${AUXILIUM_ARG_SERVICE_NAME}"
            ;;
        stop)
            echo "Stopping service"
            [ "${AUXILIUM_ARG_FORCE}" = "1" ] && echo "Force stop enabled"
            ;;
        status)
            echo "Service status: running"
            ;;
esac

auxilium_close

Lancement avec sous-commande

≥ auxilium_test start my_service
Starting service: start

Appel de l'aide principale

≥ auxilium_test --help
Description:                                               
   Application with subcommand support

Usage: auxilium_test {start|stop|status} [-h|--help ] [--sh_completion SH_COMPLETION] [-v|--verbose ]

Subcommands:
   start
                                  Start the service
   stop
                                  Stop the service
   status
                                  Show service status

Optional Arguments:
   -h|--help 
                                  This help message
   --sh_completion SH_COMPLETION  Choice: bash|zsh
                                  Generate shell completion script
   -v|--verbose 
                                  Enable verbose output

Appel de l'aide pour la sous-commande 'start'

≥ auxilium_test start --help
Description:                                               
   auxilium_test start - Start the service

Usage: auxilium_test start [-h|--help ] [-v|--verbose ] [-c|--config CONFIG] [--log_file LOG_FILE] <SERVICE_NAME>

Optional Arguments:
   -h|--help 
                                  This help message
   -v|--verbose 
                                  Enable verbose output
   -c|--config CONFIG             Default: /etc/myapp.conf
                                  Configuration file
   --log_file LOG_FILE
                                  Log file path

Positional Arguments:
   SERVICE_NAME
                                  Name of service to start

Appel de l'aide pour la sous-commande 'stop'

≥ auxilium_test stop --help
Description:                                               
   auxilium_test stop - Stop the service

Usage: auxilium_test stop [-h|--help ] [-v|--verbose ] [-c|--config CONFIG] [--force ]

Optional Arguments:
   -h|--help 
                                  This help message
   -v|--verbose 
                                  Enable verbose output
   -c|--config CONFIG             Default: /etc/myapp.conf
                                  Configuration file
   --force 
                                  Force stop

Completion Bash

$ bin/auxilium_test <TAB>
-h               --sh_completion  status           -v               
--help           start            stop             --verbose        

$ bin/auxilium_test stop -<TAB>
--force          -h               --help           --sh_completion  -v               --verbose

Completion Zsh

≥ bin/auxilium_test <TAB>
--help           -h  -- This help message                                                                                                   
--sh_completion      -- Generate shell completion script                                                                                    
start                -- Start the service                                                                                                   
status               -- Show service status                                                                                                 
stop                 -- Stop the service                                                                                                    
--verbose        -v  -- Enable verbose output

≥ bin/auxilium_test stop -<TAB>
--config   -c  -- Configuration file                                                                                                        
--force        -- Force stop                                                                                                                
--help     -h  -- This help message                                                                                                         
--verbose  -v  -- Enable verbose output

Appli l'utilisant

Dispositio (Dépêche ici)

Contribution

Liens

  • # lien ko

    Posté par  . Évalué à 1 (+1/-0). Dernière modification le 22 août 2025 à 13:01.

    Salut, le lien vers la dépêche Dispositio est cassé :(

    Super comme bibliothèque, faut vraiment que je me penche dessus !

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.