IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Bonne syntaxe pour une fonction utilisable dans un pipe


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut Bonne syntaxe pour une fonction utilisable dans un pipe
    Bonjour et re,

    la question c'est le titre.
    je pense qu'il existe une façon beaucoup plus élégante, et surtout beaucoup plus robuste, de parvenir à coder, pour utiliser une fonction maison, autrement que sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    !#/bin/bash
    # ceci est une fonction, un script, une commande sourcer ou dans le path
    function maison {
     
      while getops :desopts:avecousansarg: ; do
        case $opt in
          tout le machin
        esac
     done
     
     test args sans option ? (why not)
     
     # **** prise en compte du pipe
     while read line; do
      # traitement de ce qui arrive par le pipe, en tenant compte des arguments, et des options ...
      # et là c'est compliqué aussi, si le pipe envoie ligne par ligne ou pas, si je veux en sortie ligne par ligne ou pas ...
      # mais encore c'est + la syntaxe qui me préoccupe pour le moment, read, n'y a t'il pas mieux ? (en même temps read, c'est le fondement de la puissance  
     done
     
    }
    Merci d'avance, de m'éclaircir tout ça.

  2. #2
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par Dens1 Voir le message
    en tenant compte des arguments, ...
    car je me suis aperçu (pardon je suis presque novice à ce niveau, que) que les arguments ne sont pas ce qui arrive par le pipe

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    As tu compris ce qu'est un pipe ?

    Un pipe permet de chainer 2 commandes, la seconde prenant en entrée la sortie de la première commande.

    Les arguments, c'est ce que tu passes à un programme, ex:
    cat fichier.txt : ficihier.txt est l'argument fourni à la commande cat.

    Dans un langage de programmation, ou de script, une fonction va également (ou non) attendre des arguments qui lui sont passé à son appel et exploités dans le corps de la fonction.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    bonjour,
    j'ai dû mal m'exprimer. Ou j'ai parlé en périphérie pour dresser un topo qui m'importe peu. Le problème n'est pas les arguments de la fonction.
    le problème est la bonne syntaxe pour qu'une fonction soit utilisable dans un pipe, la gestion des options et des arguments coulera de source.

    EDIT: j'ai modifié l'intitulé, Coder n'était pas approprié à mon humble avis

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Dens1 Voir le message
    le problème est la bonne syntaxe pour qu'une fonction soit utilisable dans un pipe,
    J'ai du mal à comprendre ce que tu veux précisément

    La bonne syntaxe pour utiliser une fonction dans un pipe, c'est de définir la fonction et de l'utiliser dans le pipe...

    Je ne sais pas quoi répondre d'autre si ce n'est montrer un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ function mongrep() {
       grep "$1"
    }
     
    $ echo -e "coucou\nboubou" | mongrep 'bou'
    boubou
    La fonction mongrep (qui est une version hautement améliorée de grep) est définie avec le mot-clé function (qui n'est d'ailleurs pas obligatoire) et est utilisée dans le pipe...

    Cela répond-il à ta question ?

  6. #6
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    j'y réfléchis dès que je peux et je reviens vers toi. Visiblement soit je ne comprends pas un truc qui coule de source, soit j'ai mal posé ma question. Je reviens avec des exemples, plus tard. Merci pour ta réponse.

  7. #7
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    J'ai du mal à comprendre ce que tu veux précisément
    La bonne syntaxe pour utiliser une fonction dans un pipe, c'est de définir la fonction et de l'utiliser dans le pipe...
    Je ne sais pas quoi répondre d'autre si ce n'est montrer un exemple:
    Certes ...
    Citation Envoyé par chrtophe Voir le message
    As tu compris ce qu'est un pipe ?
    Un pipe permet de chainer 2 commandes, la seconde prenant en entrée la sortie de la première commande.
    Les arguments, c'est ce que tu passes à un programme, ex:
    Certes ...

    Bonjour à vous,

    J'avoue ne même plus trop bien comprendre mon exemple. Par contre l'intitulé du fil m'évoque toujours quelque chose. Il est à regrouper avec quelques autres post
    où je demandais comment "décompiler" du Bash (idée made in Absurdie mais qui pourtant est possible). Cela pour lire les sources de mes commandes linux favorites.
    Vous me rappeliez à juste titre que les commandes linux ne sont pas écrites en Bash , mais en C (Où avais-je la tête ? Nul ne le sait).
    Voilà pour le contexte.

    Je m'étais aperçu (mais sans doute je faisais d'autres erreurs) qu'une fonction "maison" ne fonctionnait pas dans un pipe. C'est pourquoi je voulais voir le code source
    des built-in Linux afin de m'en inspirer histoire de pas me casser le pipe. Probablement que j'utilisais une commande qui ne convient pas dans un Pipe. Et oui, il y en a !

    Although all of the Linux commands have the three standard streams, not all of them accept another command’s stdout as input to their stdin. That means you can’t pipe input to them.
    Advertisement
    xargs is a command for building execution pipelines using the standard data streams. By using xargs we can make commands such as echo, rm, and mkdir accept standard input as arguments.
    dixit: http://www.howtogeek.com/435164/how-...mand-on-linux/

    J'ai donc trouvé ma solution en XARGS quand c'était approprié, en codant un peu plus réalistement quand c'est moi qui marchait pas

    NB:
    pour en revenir à l'exemple de la fonction maison en post 1, deux remarques:
    - getopts:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OPTIND=1 # avant while getopts
    shift $((OPTIND - 1)) # après done
    ça marche mieux ! pour récupérer les arguments passé à la fonction (et non les options et leur paramètre éventuel, ce que gère getopts)
    - while read -r line
    c'est bien mais si dans la boucle on fait appel à nouveau à read en vue d'une intéraction console, il faut spécifier (il m'a semblé) à read quoi lire,
    sinon il lit $line (sans demander).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/03/2011, 11h54
  2. [SP-2007] Créer une fonction utilisable dans les champs calculés
    Par lolomoss dans le forum SharePoint
    Réponses: 4
    Dernier message: 25/06/2009, 08h49
  3. où déclarer une fonction utilisée dans toutes mes jsp ?
    Par aurelientp dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 22/02/2008, 10h38
  4. Utiliser une fonction excel dans une macro et proprièté range
    Par bebel9313 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/08/2007, 14h25
  5. [Requête] Utilisation d'une fonction perso dans une requête
    Par Julien Dufour dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/03/2007, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo