salut,

On Fri, Oct 04, 2024 at 04:37:01PM +0000, benoit wrote:
> Si par exemple, je voulais écrire un script qui concatène des fichiers dans le
> fichier destination.txt
> % ./monscript -i fichier1.txt fichier2.txt -o destination.txt

respecter les conventions unix rendent tes scripts

* plus faciles à écrire
* plus facile à prendre en main
* plus génériques et manipulables ( si tu peux eviter -o et écrire dans
  stdout, ce serait bien)

ces conventions sont:

* les flags puis la liste des input
* si la liste est vide, stdin est l'input
* si la liste contient -, c'est pour traiter stdin
* le résutat s'affiche par defaut dans stdout (ca permet de piper, par exemple)
* les messages pour l'humain (et pas seulement les erreurs) dans stderr

demo ( /bin/sh)

        dest=stdout
        set -- -o target source1 source2 source3
        while getopts ho: arg; do
                case "$arg"
                in (h) usage
                ;; (o) dest=$OPTARG
                esac
        done
        shift $((OPTIND - 1))
        for it; do
                echo le traitement de $it vers $dest
        done


> $OPTARG ne contient que fichier1.txt, comme si fichier2.txt, n’était pas
> analysé par getopts

parce que getopt a été écrit pour écrire des commandes unix

si tu veux écrire un truc dans le style de ffmpeg ou convert (avec des
multiples in et out), tu dois gérer tes tableaux à la main (je te déconseille
dash pour ça, utilise mksh ou zsh).

version zsh:

        input=()
        output=()
        set -- -i a b c -o A B C -i d
        while (( $# )) {
                case "${1:-}"
                in (--) shift;  break
                ;; (-o | --output ) to=output ; shift
                ;; (-i | --input  ) to=input  ; shift
                ;; (*) case "$to"
                        in (input)  input+="$1"  ; shift
                        ;; (output) output+="$1" ; shift
                        ;; (*) ……
                        esac
                esac
        }
        echo input: $input
        echo output: $output

mais comme je le disais au début: je pense que c'est une mauvaise idée.

si tu nous explique ce que fait ton script, on pourrait peut-être t'aider mieux?

cordialement,

-- 
Marc Chantreux
Pôle CESAR (Calcul et services avancés à la recherche)
Université de Strasbourg
14 rue René Descartes,
BP 80010, 67084 STRASBOURG CEDEX
03.68.85.60.79

Répondre à