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

Linux Discussion :

construire une commande complexe à l'aide de plusieurs sous commandes


Sujet :

Linux

  1. #1
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut construire une commande complexe à l'aide de plusieurs sous commandes
    Bonjour à tous,
    je rencontre un problème sur lequel je bute depuis un moment

    J'utilise un outil en ligne de commande, et je souhaiterai pouvoir passer à un script shell, des instructions de cet outil (peu importe l'outil, ce n'est pas le propos).

    Par exemple, je souhaiterai pouvoir construire une commande telle que ls -l | wc -l > fichierB.res, en rajoutant un suffixe comme par exemple | wc -l > fichierB.res à la commande de base ls -l afin de construire l expression complete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -l | wc -l > fichierB.res
    Pour cela, voici ce que j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      1 #!/bin/bash
      2 echo "debut"
      3 REQUETE='ls -l'
      4 SUFFIXE=' | wc -l > fichierB.res'
      5 TOTAL="$REQUETE $SUFFIXE"
      6 $TOTAL
      7 echo "fin"
    voici le résultat à lexecution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     ./tmp 
    debut
    ls: cannot access |: No such file or directory
    ls: cannot access wc: No such file or directory
    ls: cannot access >: No such file or directory
    -rw-r--r-- 1 moi groupe3 2010-12-30 14:37 fichierB.res
    fin
    J'espère qu'une fois que j'aurais solutionné ce petit exemple avec le ls -l | wc -l, je pourrai corriger mon "vrai" script.

    Ma question est donc la suivante : comment construire une commande à partir de 2 variables contenant des parties de la commande telle que TOTAL=COMMANDE + SUFFIXE ?
    Si quelqu'un sait comment faire ....
    merci d'avance
    ben

  2. #2
    Invité
    Invité(e)
    Par défaut
    Hello,

    adapte la ligne suivante de cette manière pour que cela fonctionne:
    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
    22
    #!/bin/bash -xv
    echo "debut"
    + echo debut
    debut
    REQUETE='ls -l'
    + REQUETE='ls -l'
    SUFFIXE=' | wc -l > fichierB.res'
    + SUFFIXE=' | wc -l > fichierB.res'
    TOTAL="$REQUETE $SUFFIXE"
    + TOTAL='ls -l  | wc -l > fichierB.res'
    eval "$TOTAL"
    + eval 'ls -l  | wc -l > fichierB.res'
    ls -l  | wc -l > fichierB.res
    ++ wc -l
    ++ ls -l
     echo "fin"
    + echo fin
    fin
    
    $ cat fichierB.res
    38

  3. #3
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut eval()
    j'ai pu arriver à faire ce que je voulais grâce à la fonction eval () :
    DESCRIPTION
    Eval takes one or more arguments, which together comprise a Tcl script containing one or more commands. Eval concatenates all its arguments in the same fashion as
    the concat command, passes the concatenated string to the Tcl interpreter recursively, and returns the result of that evaluation (or any error generated by it). Note
    that the list command quotes sequences of words in such a way that they are not further expanded by the eval command.
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    5 echo "debut"
      6 #REQUETE='ls -l'
      7 
      8 REQUETE=$1
      9 SUFFIXE2='| wc -l'
     10 TOTAL="$REQUETE $SUFFIXE2"
     11 
     12 echo $TOTAL
     13 
     14 eval "$TOTAL"
     15 echo "fin"
    ++,
    ben

  4. #4
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut
    merci pour ta réponse ,
    à bientôt,
    ben

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ok,

    N'oublie pas le tag résolu si tu as pu solutionner ton problème

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

Discussions similaires

  1. [RegEx] Besoin d'aide pour construire une regex complexe
    Par Predax dans le forum Langage
    Réponses: 2
    Dernier message: 06/03/2013, 08h52
  2. Réponses: 1
    Dernier message: 20/11/2008, 02h17
  3. Construire une chaine avec plusieurs espaces vides
    Par imane_bennouna dans le forum Langage
    Réponses: 10
    Dernier message: 04/08/2006, 09h29
  4. Aide pour écrire une requête complexe
    Par julienbdx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/11/2005, 16h58
  5. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05

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