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

Répondre à