• Contenu de $OPTARG avec getopts pour analyser les options d'un script e

    From benoit@21:1/5 to All on Fri Oct 4 18:40:01 2024
    This is a multi-part message in MIME format.

    Qm9uam91ciwKCkF2ZWMgZ2V0b3B0cywgamUgbmUgc2FpcyBwYXMgY29tbWVudCBvbiBmYWl0IHBv dXIgcsOpY3Vww6lyZXIgZGUgbXVsdGlwbGUgYXJndW1lbnRzIGRhbnMgJE9QVEFSRywgauKAmWFp IHJlZ2FyZMOpIHVuIHBldSBzdXIgbGUgbmV0LCBtYWlzIGplIG5lIGNvbXByZW5kcyBwYXMgYmll bi4KClNpIHBhciBleGVtcGxlLCBqZSB2b3VsYWlzIMOpY3JpcmUgdW4gc2NyaXB0IHF1aSBjb25j YXTDqG5lIGRlcyBmaWNoaWVycyBkYW5zIGxlIGZpY2hpZXIgZGVzdGluYXRpb24udHh0JSAuL21v bnNjcmlwdCAtaSBmaWNoaWVyMS50eHQgZmljaGllcjIudHh0IC1vIGRlc3RpbmF0aW9uLnR4dAoK JE9QVEFSRyBuZSBjb250aWVudCBxdWUgZmljaGllcjEudHh0LCBjb21tZSBzaSBmaWNoaWVyMi50 eHQsIG7igJnDqXRhaXQgcGFzIGFuYWx5c8OpIHBhciBnZXRvcHRzCgpNZXJjaSBk4oCZYXZhbmNl CgrigJMgQmVub8OudA==

    PHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXpl OiAxNHB4OyBsaW5lLWhlaWdodDogbm9ybWFsOyBmb250LXdlaWdodDogNDAwOyI+PC9zcGFuPjwv cD48c3Bhbj5Cb25qb3VyLDwvc3Bhbj48ZGl2Pjxicj48L2Rpdj48ZGl2PjxzcGFuPkF2ZWMgZ2V0 b3B0cywgamUgbmUgc2FpcyBwYXMgY29tbWVudCBvbiBmYWl0IHBvdXIgcsOpY3Vww6lyZXIgZGUg bXVsdGlwbGUgYXJndW1lbnRzIGRhbnMgJE9QVEFSRywgauKAmWFpIHJlZ2FyZMOpIHVuIHBldSBz dXIgbGUgbmV0LCBtYWlzIGplIG5lIGNvbXByZW5kcyBwYXMgYmllbi48L3NwYW4+PC9kaXY+PGRp dj48YnI+PC9kaXY+PGRpdj48c3Bhbj5TaSBwYXIgZXhlbXBsZSwgamUgdm91bGFpcyDDqWNyaXJl IHVuIHNjcmlwdCBxdWkgY29uY2F0w6huZSBkZXMgZmljaGllcnMgZGFucyBsZSBmaWNoaWVyIGRl c3RpbmF0aW9uLnR4dDwvc3Bhbj48L2Rpdj48c3Bhbj4lIC4vbW9uc2NyaXB0IC1pIGZpY2hpZXIx LnR4dCBmaWNoaWVyMi50eHQgLW8gZGVzdGluYXRpb24udHh0PC9zcGFuPjxkaXY+PGJyPjwvZGl2 PjxkaXY+PHNwYW4+JE9QVEFSRyBuZSBjb250aWVudCBxdWUgZmljaGllcjEudHh0LCBjb21tZSBz aSBmaWNoaWVyMi50eHQsIG7igJnDqXRhaXQgcGFzIGFuYWx5c8OpIHBhciBnZXRvcHRzPC9zcGFu PjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PHNwYW4+TWVyY2kgZOKA mWF2YW5jZTwvc3Bhbj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PjxzcGFuPuKAkyA8L3NwYW4+ PC9kaXY+PHNwYW4+QmVub8OudDwvc3Bhbj48cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFy aWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZv bnQtd2VpZ2h0OiA0MDA7Ij48L3NwYW4+PC9wPjxicj4=

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Basile STARYNKEVITCH@21:1/5 to benoit on Fri Oct 4 19:50:01 2024
    This is a multi-part message in MIME format.
    On 10/4/24 18:37, benoit wrote:

    Bonjour,

    Avec getopts, je ne sais pas comment on fait pour récupérer de
    multiple arguments dans $OPTARG, j’ai regardé un peu sur le net, mais
    je ne comprends pas bien.

    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

    Nous ne connaissons par le contenu de monscript, donc il est difficile
    d'aider.

    Peut-être qu'il suffirat de l'invoquer comme ./monscript -i fichier1.txt
    -i fichier2.txt -o destination.txt

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

    Il est par ailleurs possible que le code source de GNU bash en https://ftp.gnu.org/gnu/bash/bash-5.3-alpha.tar.gz contienne des
    exemples tests. J'y vois des fichiers bash-5.3-alpha/tests/getopts* qui pourraient vous inspirer.

    Librement

    (NB mon projet logiciel libre est le moteur d'inférences en https://github.com/RefPerSys/RefPerSys/ ....)


    --
    Basile STARYNKEVITCH<[email protected]>
    8 rue de la Faïencerie
    92340 Bourg-la-Reine mobile: +33 6 8501 2359 Francehttp://starynkevitch.net/Basile/

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 10/4/24 18:37, benoit wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:aGZCc_D4srEHmrnvpNFDgCucU_jJ6JV5Lck3eaWZox-3TPdZA-5KNddKEAwNL37zqKfuG6SCmkhz_pibg-HbZm2Hb6wv2bCaYqc8L5JqxOo=@protonmail.ch">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <p><span
    style="font-family: Arial, sans-serif; font-size: 14px; line-height: normal; font-weight: 400;"></span></p>
    <span>Bonjour,</span>
    <div><br>
    </div>
    <div><span>Avec getopts, je ne sais pas comment on fait pour
    récupérer de multiple arguments dans $OPTARG, j’ai regardé un
    peu sur le net, mais je ne comprends pas bien.</span></div>
    <div><br>
    </div>
    <div><span>Si par exemple, je voulais écrire un script qui
    concatène des fichiers dans le fichier destination.txt</span></div>
    <span>% ./monscript -i fichier1.txt fichier2.txt -o
    destination.txt</span>
    <div><br>
    </div>
    </blockquote>
    <p>Nous ne connaissons par le contenu de monscript, donc il est
    difficile d'aider.</p>
    <p>Peut-être qu'il suffirat de l'invoquer comme <span> ./monscript
    -i fichier1.txt -i fichier2.txt -o destination.txt</span></p>
    <blockquote type="cite" cite="mid:aGZCc_D4srEHmrnvpNFDgCucU_jJ6JV5Lck3eaWZox-3TPdZA-5KNddKEAwNL37zqKfuG6SCmkhz_pibg-HbZm2Hb6wv2bCaYqc8L5JqxOo=@protonmail.ch">
    <div><span>$OPTARG ne contient que fichier1.txt, comme si
    fichier2.txt, n’était pas analysé par getopts</span></div>
    </blockquote>
    <p>Il est par ailleurs possible que le code source de GNU bash en
    <a class="moz-txt-link-freetext" href="https://ftp.gnu.org/gnu/bash/bash-5.3-alpha.tar.gz">https://ftp.gnu.org/gnu/bash/bash-5.3-alpha.tar.gz</a> contienne des
    exemples tests. J'y vois des fichiers
    bash-5.3-alpha/tests/getopts* qui pourraient vous inspirer.<br>
    </p>
    <p>Librement</p>
    <p>(NB mon projet logiciel libre est le moteur d'inférences en
    <a class="moz-txt-link-freetext" href="https://github.com/RefPerSys/RefPerSys/">https://github.com/RefPerSys/RefPerSys/</a> ....)<br>
    </p>
    <p><br>
    </p>
    <pre class="moz-signature" cols="72">--
    Basile STARYNKEVITCH <a class="moz-txt-link-rfc2396E" href="mailto:[email protected]">&lt;[email protected]&gt;</a>
    8 rue de la Faïencerie
    92340 Bourg-la-Reine mobile: +33 6 8501 2359
    France <a class="moz-txt-link-freetext" href="http://starynkevitch.net/Basile/">http://starynkevitch.net/Basile/</a></pre>
    </body>
    </html>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Marc Chantreux@21:1/5 to benoit on Fri Oct 4 22:00:01 2024
    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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From benoit@21:1/5 to All on Sun Oct 6 15:30:01 2024
    This is a multi-part message in MIME format.

    TGUgdmVuZHJlZGkgNCBvY3RvYnJlIDIwMjQgw6AgMTk6NDEsIEJhc2lsZSBTVEFSWU5LRVZJVENI IDxiYXNpbGVAc3Rhcnlua2V2aXRjaC5uZXQ+IGEgw6ljcml0IDoKCj4gTm91cyBuZSBjb25uYWlz c29ucyBwYXIgbGUgY29udGVudSBkZSBtb25zY3JpcHQsIGRvbmMgaWwgZXN0IGRpZmZpY2lsZSBk J2FpZGVyLgoKSmUgbmUgbCdhaSBwYXMgZW5jb3JlIMOpY3JpdCwgamUgbidhaSBmYWl0IHF1ZSBk ZXMgdGVzdHMgaW5mcnVjdHVldXguCgpFbiBkZXV4IG1vdHMsIGplIHZvdWRyYWlzLCBkZSBtYW5p w6hyZSBsYSBwbHVzIHNpbXBsZSBwb3NzaWJsZSwgZW4gcWxxIGxpZ25lcyBkZSBzY3JpcHQsIGNv bnZlcnRpciBkZXMgaW1hZ2VzIGRlIGRvY3VtZW50cyBwYXBpZXIobnVtw6lyaXNlciBkdSBwYXBp ZXIpIGVuIHBkZiwgcHVpcyBhcHBsaXF1ZXIgdW5lIHJlY29ubmFpc3NhbmNlIGRlIGNhcmFjdMOo cmUgc3VyIGxlIHBkZiBwb3VyIHkgZmFpcmUgZGVzIHJlY2hlcmNoZXMgc3VyIGRlcyBtb3RpZnMu CgpEYW5zIHVuIHRlcm1pbmFsLCDDp2EgZm9uY3Rpb25uZSwgZW4gZ3JvcyB2b2ljaSBjZSBxdWUg amUgdmV1eCBmYWlyZSwgYXVxdWVsIGonYWpvdXRlcmFpIGxlcyBvcHRpb25zIGV0IGwnYXV0b21h dGlzYXRpb24gZHUgdHJhaXRlbWVudCBwcsOpYWxhYmxlIGRlcyBpbWFnZXMKCmltZzJwZGYgLS1w YWdlc2l6ZSBBNCBmaWNoaWVyMS5qcGcgZmljaGllcjIuanBnIHwgb2NybXlwZGYgLSBteWZpbGUu cGRmCgpNb24gYnV0IGMnZXN0IGRlIG5lIHBhcyBkZXZvaXIgcmV0ZW5pciBsZXMgb3B0aW9ucyBk ZSBjZXMgY29tbWFuZGVzIGV0IGRlIHByb2dyZXNzZXIgZW4gYmFzaCwgYydlc3QgcGx1cyBkZSBs YSBjdXJpb3NpdMOpIGVuIGZhaXQuLi4KCj4gUGV1dC3DqnRyZSBxdSdpbCBzdWZmaXJhdCBkZSBs J2ludm9xdWVyIGNvbW1lICAuL21vbnNjcmlwdCAtaSBmaWNoaWVyMS50eHQgLWkgZmljaGllcjIu dHh0IC1vIGRlc3RpbmF0aW9uLnR4dAoKRW4gZWZmZXQsIGonYWkgdnUgY2lyY3VsZXIgY2V0dGUg c29sdXRpb24KCk1lcmNpCgotLQpCZW5vw650

    PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0 cHg7Ij5MZSB2ZW5kcmVkaSA0IG9jdG9icmUgMjAyNCDDoCAxOTo0MSwgQmFzaWxlIFNUQVJZTktF VklUQ0ggJmx0O2Jhc2lsZUBzdGFyeW5rZXZpdGNoLm5ldCZndDsgYSDDqWNyaXQmbmJzcDs6DQog ICAgICAgIDxibG9ja3F1b3RlIGNsYXNzPSJwcm90b25tYWlsX3F1b3RlIiB0eXBlPSJjaXRlIj4N CiAgICA8cD5Ob3VzIG5lIGNvbm5haXNzb25zIHBhciBsZSBjb250ZW51IGRlIG1vbnNjcmlwdCwg ZG9uYyBpbCBlc3QNCiAgICAgIGRpZmZpY2lsZSBkJ2FpZGVyLjwvcD48L2Jsb2NrcXVvdGU+PHA+ SmUgbmUgbCdhaSBwYXMgZW5jb3JlIMOpY3JpdCwgamUgbidhaSBmYWl0IHF1ZSBkZXMgdGVzdHMg aW5mcnVjdHVldXguPC9wPjxwPkVuIGRldXggbW90cywgamUgdm91ZHJhaXMsIGRlIG1hbmnDqHJl IGxhIHBsdXMgc2ltcGxlIHBvc3NpYmxlLCBlbiBxbHEgbGlnbmVzIGRlIHNjcmlwdCwgY29udmVy dGlyIGRlcyBpbWFnZXMgZGUgZG9jdW1lbnRzIHBhcGllcihudW3DqXJpc2VyIGR1IHBhcGllcikg ZW4gcGRmLCBwdWlzIGFwcGxpcXVlciB1bmUgcmVjb25uYWlzc2FuY2UgZGUgY2FyYWN0w6hyZSBz dXIgbGUgcGRmIHBvdXIgeSBmYWlyZSBkZXMgcmVjaGVyY2hlcyBzdXIgZGVzIG1vdGlmcy4mbmJz cDs8L3A+PHA+RGFucyB1biB0ZXJtaW5hbCwgw6dhIGZvbmN0aW9ubmUsIGU8c3Bhbj5uIGdyb3Mg dm9pY2kgY2UgcXVlIGplIHZldXggZmFpcmUsIGF1cXVlbCBqJ2Fqb3V0ZXJhaSBsZXMgb3B0aW9u cyBldCBsJ2F1dG9tYXRpc2F0aW9uIGR1IHRyYWl0ZW1lbnQgcHLDqWFsYWJsZSBkZXMgaW1hZ2Vz PGJyPjwvc3Bhbj48L3A+PHA+PHNwYW4+aW1nMnBkZiAtLXBhZ2VzaXplIEE0IGZpY2hpZXIxLmpw ZyA8c3Bhbj5maWNoaWVyPC9zcGFuPjIuanBnIHwgb2NybXlwZGYgLSBteWZpbGUucGRmPC9zcGFu PiA8YnI+PC9wPjxwPk1vbiBidXQgYydlc3QgZGUgbmUgcGFzIGRldm9pciByZXRlbmlyIGxlcyBv cHRpb25zIGRlIGNlcyBjb21tYW5kZXMgZXQgZGUgcHJvZ3Jlc3NlciBlbiBiYXNoLCBjJ2VzdCBw bHVzIGRlIGxhIGN1cmlvc2l0w6kgZW4gZmFpdC4uLjxicj48L3A+PGJsb2NrcXVvdGUgY2xhc3M9 InByb3Rvbm1haWxfcXVvdGUiIHR5cGU9ImNpdGUiPg0KICAgIDxwPlBldXQtw6p0cmUgcXUnaWwg c3VmZmlyYXQgZGUgbCdpbnZvcXVlciBjb21tZSA8c3Bhbj4gLi9tb25zY3JpcHQNCiAgICAgICAg LWkgZmljaGllcjEudHh0IC1pIGZpY2hpZXIyLnR4dCAtbyBkZXN0aW5hdGlvbi50eHQ8L3NwYW4+ PC9wPjwvYmxvY2txdW90ZT48cD48c3Bhbj5FbiBlZmZldCwgaidhaSB2dSBjaXJjdWxlciBjZXR0 ZSBzb2x1dGlvbjxicj48L3NwYW4+PC9wPjxwPjxzcGFuPk1lcmNpPGJyPjwvc3Bhbj48L3A+PC9k aXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6 IDE0cHg7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1 NSwgMjU1KTsiPi0tPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNl cmlmOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGJhY2tncm91bmQtY29s b3I6IHJnYigyNTUsIDI1NSwgMjU1KTsiPkJlbm/DrnQ8YnI+PC9kaXY+

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From benoit@21:1/5 to All on Sun Oct 6 15:50:01 2024
    Le vendredi 4 octobre 2024 à 19:39, didier gaumet <[email protected]> a écrit :

    Le 04/10/2024 à 18:37, benoit a écrit :

    Bonjour,

    Avec getopts, je ne sais pas comment on fait pour récupérer de multiple arguments dans $OPTARG, j’ai regardé un peu sur le net, mais je ne comprends pas bien.

    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

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

    Merci d’avance


    Benoît


    Avertissement: j'y connais rien, je n'écris pas de scripts bash, je n'utilise pas $OPTARGS

    par contre, c'est peut-être moi qui ne comprends pas mais d'après les docs: https://linuxsimply.com/bash-scripting-tutorial/functions/script-argument/bash-optarg/
    file://///usr/share/doc/util-linux/examples/getopt-example.bash
    et les pages man getopt(1 et 3)

    Pour l'instant, je intéresse à getopts (avec un "s") qui fait partie du bash, mais si getopt répond mieux à ce que je veux faire, je suis prenneur

    (tout ça malheureusement parcouru en diagonale)

    1) j'ai l'impression que $OPTARGS ne retourne que la valeur du paramètre choisi (désolé si j'enfonce une porte ouverte):
    voir exemple 1 sur linuxsimply

    2) l'exemple du fichier /usr/share/[...] pourrait suggérer (mais j'ai peut-être rien compris) que lorsque un paramètre comprend des
    séparateurs (espaces,...) il faut utiliser "$@"

    Et testant ce que retourne "$@", j'ai l'impression (je découvre et je n'y connais rien, dis moi si je me trompe) que "$@" c'est stdin "en vrac" tout ce qui vient après la commande et que getopts et là pour m'aider à traiter les options.

    ----
    #!/bin/bash

    echo $@
    ----

    % ./teststdin -o destination.txt fichier1.txt fichier2.txt
    -o destination.txt fichier1.txt fichier2.txt

    Merci,

    --
    Benoît

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From benoit@21:1/5 to All on Sun Oct 6 16:30:02 2024
    Le vendredi 4 octobre 2024 à 21:50, Marc Chantreux <[email protected]> a écrit :

    salut,


    Salut,


    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)

    J'aurais du préciser dans ma demande (j'ai voulu simplifier en parlant de concaténation, mais l'exemple était mal choisis), c'est pour sortir un pdf, je ne sais pas comment envoyer autre chose que des caractères dans stdout, mais je vais me
    documenter.

    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

    Je découvre ça en te lisant, je ne connaissais pas ces conventions.


    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


    Je viens de tester, écrit comme ça, ca marche !
    Mais je cale sur un truc, qu'est-ce qui permet l’affectation de it(j'ai renommé "it" par "bidule", pour m'assurer que ce n'est pas une variable prédéfinie.) ?


    for bidule; do
    echo le traitement de $bidule vers $dest
    done

    Ce n'est pas une variable prédéfinie affectée par getopts (comme OPTARG ou OPTIND), ne croyant pas à la magie... ;-)
    Comment ça marche ?

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



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


    Ce que je voudrais qu'il fasse, c'est prendre une série d'images de document papier en A4, (dont il faudra aussi scripter le traitement : poids redimensionnement en A4, etc), les mettre dans un pdf(une par page), puis faire une reconnaissance de caractè
    re.

    img2pdf --pagesize A4 AAA_9722.jpg AAA_9721.jpg | ocrmypdf - myfile.pdf

    En effet, j'ai l'impression que si je peux utiliser le "|", c'est que img2pdf envois le pdf dans stdout, c'est bien ça que je dois faire plutôt que de définir un fichier de sortie avec -o fichier.pdf.

    Merci

    --
    Benoît

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Marc Chantreux@21:1/5 to benoit on Sun Oct 6 21:50:01 2024
    salut,

    On Sun, Oct 06, 2024 at 02:28:31PM +0000, benoit wrote:
    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

    Je découvre ça en te lisant, je ne connaissais pas ces conventions.

    * sauf rares exceptions (tr), les filtres de base s'y conforment
    (join, paste, cat, grep, awk, sed, …) et perl a justement le
    filehandler par defaut (ARGV) qui respecte cette convention
    (donc il est très simple d'écrire une CLI en perl).
    * pour l'organisation des parametres, il me semble que je l'ai lu dans
    "unix programming env" de rob pike (mais je suis plus sur) ou dans TAOUP
    d'Eric Raymond (qui en son temps était très connu pour avoir écrit le
    jargon file, cathedral et bazaar, … )
    * pour stdout/stderr c'est la parole sainte de McIllroy

    « Expect the output of every program to become the input to another, as
    yet unknown, program. Don't clutter output with extraneous information.
    Avoid stringently columnar or binary input formats. Don't insist on
    interactive input »

    lire https://en.wikipedia.org/wiki/Unix_philosophy

    tu verras à l'usage que c'est super pratique parce qu'il t'arrivera
    souvent de pouvoir passer la fin de tes arguments avec "$@" au filtre
    qui va bien. c'est la raison pour laquelle c'est vraiment chiant de
    tomber sur quelqu'un qui joue pas le jeu.


    Je viens de tester, écrit comme ça, ca marche !

    parfait :)

    Mais je cale sur un truc, qu'est-ce qui permet l’affectation de
    it(j'ai renommé "it" par "bidule", pour m'assurer que ce n'est pas une variable prédéfinie.) ?

    man dash:

    The syntax of the for command is

    for variable [ in [ word ... ] ]
    do list
    done

    The words following in are expanded, and then the list is executed repeatedly with the variable set to
    each word in turn. Omitting in word ... is equivalent to in "$@". <<<<<<<<<<

    Ce n'est pas une variable prédéfinie affectée par getopts (comme OPTARG ou OPTIND)

    non: getopt est déjà passé :)

    En effet, j'ai l'impression que si je peux utiliser le "|", c'est que
    img2pdf envois le pdf dans stdout, c'est bien ça que je dois faire
    plutôt que de définir un fichier de sortie avec -o fichier.pdf.

    ah ben oui: c'est meme la fonction du pipe: connecter la stdout du
    process de gauche avec la stdin du process a droite.

    grep passwd | cut -f1 -d: | sort

    c'est la même chose qu'écrire

    mkfifo A B
    getent passwd > A &
    < A cut -f1 -d: > B &
    < B sort > C

    --
    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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From benoit@21:1/5 to All on Mon Oct 7 11:40:01 2024
    Un tout grand merci à ceux qui m'ont répondu, grâce à votre aide, il me semble que j'ai ce qu'il faut pour écrire mon petit script ! :-)


    Avec gratitude,

    --
    Benoît

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)