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 :

Question sur redirection > et pipe


Sujet :

Shell et commandes GNU

  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 281
    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 : 18 281
    Par défaut Question sur redirection > et pipe
    Bonjour,

    Pour comprendre :

    > va rediriger la sortie standard de la commande sur la gauche du signe > vers le fichier présenté par le paramètre à droite du signe >.

    | va rediriger la sortie de la commande à sa gauche vers l'entrée de la commande à sa droite.

    Que se passe t'il dans ce cas ?

    En testant la commande, le fichier est bien crée mais le cat ne donne pas de résultat.
    En théorie en lisant la commande de gauche à droite la sortie de ls est envoyée vers file.txt qui devrait être ensuit être renvoyé vers l'entrée de cat. Comment réagit l’interpréteur dans ce cas ? En apparence, comme la sortie de ls est déjà redirigée, il n'y a pas de redirection vers l'entrée de cat. Est-ce cela ?
    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

  2. #2
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    Bonjour chrtophe
    Citation Envoyé par chrtophe Voir le message
    Bonjour,

    En testant la commande, le fichier est bien crée mais le cat ne donne pas de résultat.
    En théorie en lisant la commande de gauche à droite la sortie de ls est envoyée vers file.txt qui devrait être ensuit être renvoyé vers l'entrée de cat. Comment réagit l’interpréteur dans ce cas ? En apparence, comme la sortie de ls est déjà redirigée, il n'y a pas de redirection vers l'entrée de cat. Est-ce cela ?
    Oui , C'est le résultat de la commande "ls *.txt>file.txt" qui est envoyé vers l'entrée de "cat"
    en l’occurrence le résultat est "nul" ici (Quand toto va bene)

    Un little exemple est mieux qu'un grand discours : (Avec génération d'une erreur redirigée vers la sortie std (2>&1) qui de fait , deviendra l'entrée du "cat")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls *.txt *.yen_a_pas 2>&1 > liste_des_fichiers.txt |cat > le_resultat_de_la_commande_ls
    Resultat :
    le fichier : liste_des_fichiers.txt contient la liste des fichiers "*.txt"
    et le fichier : le_resultat_de_la_commande_ls contient

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour,

    le pipe est pour éviter les fichiers temporaires dans des opérations comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ command1 >/tmp/montmp
    $ command2 /tmp/montmp
    $ rm -f /tmp/montmp
    On préfèrera:
    Ce qui montre qu'il faut indiquer le moment où le fichier temporaire putatif doit être utilisé. Par défaut, c'est en fin de commande.

    Exemple:
    La commande suivante va filtrer les motifs (écrits dans le fichier du même nom) dans le fichier transmis par le pipe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo -e "toto\ntiti" |grep -f motifs
    alors que la commande suivante va filtrer les motifs transmis par le pipe dans un fichier cible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo -e "toto\ntiti" |grep -f - cible
    En effet, le tiret indique qu'on utilise le pipe.

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 281
    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 : 18 281
    Par défaut
    Merci pour vos réponses. argoet, j'avoue que j'ai du mal à suivre. Je me demande l'algo utilisé par le shell pour analyser cela.
    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

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Ben c'est simple: c'est la dernière opération exécutée.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 281
    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 : 18 281
    Par défaut
    Ben c'est simple: c'est la dernière opération exécutée.
    Dans le cadre d'un pipe, les opérations sont exécutés en //. Je présumes qu'il faut donc lire la commande de gauche à droite ...
    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

  7. #7
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par chrtophe Voir le message
    j'avoue que j'ai du mal à suivre. Je me demande l'algo utilisé par le shell pour analyser cela.
    si tu fais référence à l'expression d'argoet de la forme commande 2>&1 > fichier | cat, il faut bien comprendre que 2>&1 ne fusionne pas les deux sorties mais applique simplement à la sortie 2 la configuration de la sortie 1, c'est à dire qu'on configure la sortie 2 pour être un "stdout", lequel sera transféré à cat par le pipe, tandis qu'on envoie la sortie 1 directement dans un fichier

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Je présumes qu'il faut donc lire la commande de gauche à droite ...
    OUI! Les deux commandes suivantes ne sont pas équivalentes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ls *.txt *.yen_a_pas > liste_des_fichiers.txt 2>&1 |cat > le_resultat_de_la_commande_ls
    $ ls *.txt *.yen_a_pas 2>&1 > liste_des_fichiers.txt |cat > le_resultat_de_la_commande_ls
    Décortiquons:
      • La sortie standard est redirigé vers un fichier.
      • La sortie d'erreur est redirigé comme la la sortie standard, donc dans un fichier.
      • Il n'y a plus de sortie. Donc le pipe ne reçoit rien.

      Au final, un fichier contiendra le résultat et les erreurs alors que l'autre sera vide.
      • La sortie d'erreur est redirigée comme le standard (par exemple vers l'écran)
      • la sortie standard est redirigée vers un fichier.
      • le pipe reçoit la sortie standard, c'est à dire les messages d'erreurs.
        Au final, le premier fichier aura les résultats et le second fichier aura les erreurs.


  9. #9
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 281
    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 : 18 281
    Par défaut
    Flodelarab,

    Décortiquons:

    La sortie standard est redirigé vers un fichier.
    La sortie d'erreur est redirigé comme la la sortie standard, donc dans un fichier.
    Il n'y a plus de sortie. Donc le pipe ne reçoit rien.
    Je comprends par ceci que la sortie standard étant redirigée, il n'y a plus de "sortie standard", donc le pipe ne reçoit rien. Est-ce bien cela ?
    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

  10. #10
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    il n'y a plus de "sortie standard"
    Elle existe toujours mais personne ne lui parle. De plus, personne ne pourrait lui parler car on a perdu la référence. Si on imagine un cas tordu où il faudrait sauvegarder la référence, on pourrait ouvrir des canaux de numéro 3, 6 ou 7 etc pour garder la mémoire de ce descripteur de "sortie standard".

  11. #11
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 281
    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 : 18 281
    Par défaut
    Merci pour les réponses. Je clos le sujet.
    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

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

Discussions similaires

  1. Question sur redirection MX
    Par Fredo67 dans le forum Exchange Server
    Réponses: 0
    Dernier message: 05/11/2009, 12h35
  2. Question sur les redirections
    Par the_greg dans le forum Référencement
    Réponses: 2
    Dernier message: 14/01/2009, 12h11
  3. [URL Rewriting] Question sur le .htaccess (Redirect)
    Par vdumont dans le forum Apache
    Réponses: 3
    Dernier message: 26/12/2007, 12h48
  4. Réponses: 2
    Dernier message: 24/10/2006, 22h12
  5. [struts] Questions sur Redirection formulaire
    Par SrK dans le forum Struts 1
    Réponses: 12
    Dernier message: 10/05/2006, 16h30

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