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 :

KSH redirection de substitution de processus


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut KSH redirection de substitution de processus
    Bonjour,

    j'essaye de lire une redirection d'un process substitution, mais ça marche pô :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ exec 3< <(sed -n '/Motif/,/finMotif/{/Motif/d;p}' monFichier)
    ksh: syntax error: `<(' unexpected
    vous voyez, ça marche pô
    je pensais pouvoir ensuite faire while read -u3 line; do...

    le message d'erreur est le même si je redirige directement sur la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read l; do echo "$l"; done < <(sed...)
    j'ai essayé avec ksh93 sur Debian Squeeze (mksh, et pdksh ne font pas mention de cette possibilité)

    est-ce particulier à Debian ?
    ai-je raté quelque chose ?


    par avance merci pour vos avis et conseils.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Je ne connais pas la redirection de substitution de processus / syntaxe '<('
    Elle n'est pas mentionnée dans mon "Le KornShell" (Bolsky & Korn, 1990).
    Apparemment, les builtin named pipes sont une spécificité bash (http://www.linuxjournal.com/article/2156?page=0,1)!

    Avec mes ksh, j'ai, au choix:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ exec 3< <(sed -n '/Motif/,/finMotif/{/Motif/d;p}' monFichier)
    ksh: syntax error: `< ' unexpected
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ exec 3< <(sed -n '/Motif/,/finMotif/{/Motif/d;p}' monFichier)
    ksh: 0403-057 Syntax error: `<' is not expected.
    Et avec un mkfifo?
    Peut-être en s'inspirant de ce que j'avais mis au point (pour les sorties) en mars:
    http://www.developpez.net/forums/d11...h/#post6543743

    http://www.ict.griffith.edu.au/antho...l/script.hints

    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
    A POSIX shell solution is to use a named pipe
     
      mkfifo mypipe
      foo=nothing
      echo "testing 1 2 3" > mypipe &
      while read line
      do
        foo=something
      done < mypipe
      echo "foo = $foo"
     
    Bash can use builtin named pipes.
     
      foo=nothing
      while read line; do
        foo=something
      done <( echo "testing 1 2 3" )
      echo "foo = $foo"

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    J'ai testé pour vous... et, aussi incroyable que cela puisse paraître, ça marche!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/ksh
    mkfifo mon_fifo
    sed -e 's|:.*||' /etc/passwd > mon_fifo &
    exec 3< mon_fifo
    while read -u3 l; do echo "l: $l"; done
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ ./test.ksh
    l: root
    l: apache
    l: jonas
    l: mysql
    l: oracle
    $

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    J'ai l'impression que ça dépend des version de ksh93

    Sur une debian en VM (93s+ 2008-01-31) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ lsb_release -a
    No LSB modules are available.
    Distributor ID:	Debian
    Description:	Debian GNU/Linux 6.0.5 (squeeze)
    Release:	6.0.5
    Codename:	squeeze
     
    $ ksh --version                      
      version         sh (AT&T Research) 93s+ 2008-01-31
     
    $ exec 3< <(sed -n '/^</,/>$/p' plop)
    ksh: syntax error: `<(' unexpected
    $
    Sur une Mint (93u 2011-02-08) :

    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
    $ /usr/bin/lsb_release -a
    No LSB modules are available.
    Distributor ID:	LinuxMint
    Description:	Linux Mint 13 Maya
    Release:	13
    Codename:	maya
     
    $ ksh --version          
      version         sh (AT&T Research) 93u 2011-02-08
     
    $ exec 3< <(sed -n '/^</,/>$/p' plop)   
     
    $ while read line;do echo "==> $line";done <&3
    ==> <TAG>
    ==> S1:0:12
    ==> S2:1:387
    ==> Z3:99:42
    ==> <ENDTAG>
    $

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    ksh continue d'évoluer sous la houlette de David Korn.
    La dernière version est disponible ici
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut
    Citation Envoyé par al1_24
    ksh continue d'évoluer sous la houlette de David Korn.
    La dernière version est disponible ici
    j'ai une impression de déjà-vu...

    en voyant la confirmation de ce que je soupçonnais par zipe31, je suis allé télécharger la dernière version de ksh chez AT&T (Version AJM 93u+ 2012-08-01), et ça fonctionne très bien.

    la version de ksh93 pour Debian Wheezy est apparemment 2008-02-02
    ...
    ? ça m'a pas l'air beaucoup mieux, je vais m'installer une wheezy pour voir.

    autrement, oui, un fifo, ou un fichier temporaire...
    de toutes façons, il faut les supprimer après usage.

    merci à tous.


    je mets en , mais si vous avez d'autres commentaires, n'hésitez pas
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. redirection d'entrées/sorties entre deux processus
    Par sunmat dans le forum Bibliothèque standard
    Réponses: 1
    Dernier message: 16/11/2008, 15h35
  2. Réponses: 0
    Dernier message: 13/03/2008, 10h10
  3. Réponses: 4
    Dernier message: 11/09/2007, 08h45
  4. Redirection entrée standard entre deux processus
    Par mverhaeghe dans le forum POSIX
    Réponses: 5
    Dernier message: 08/04/2007, 16h55
  5. Ksh - tuer les processus d'un user
    Par mzt.insat dans le forum Linux
    Réponses: 4
    Dernier message: 01/06/2006, 10h03

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