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