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 :

Résultat commande bash dans une variable


Sujet :

Shell et commandes GNU

  1. #1
    psl
    psl est déconnecté
    Membre éprouvé
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Par défaut Résultat commande bash dans une variable
    Bonsoir,
    Un petit soucis pour sauvegarder le résultat d'une commande bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    ligne=`cat /proc/uptime`
    echo $ligne
    echo $ligne | cut -f 1 -d ' '
    J’obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    7154.85 28043.08
    7154.85
    La ligne n° 3 me donne bien sur une ligne : upTime et idleTime
    La ligne n°4 me donne bien : upTime

    Par contre, pour sauvegarder upTime dans var :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var=$($ligne | cut -f 1 -d ' ')
    echo $var
    J'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./fichier.sh: ligne 5: 7154.85 : commande introuvable
    Comment peut-on faire cette affectation ?
    Merci

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 319
    Par défaut
    bonjour,

    tu as juste oublié ton "echo" de la ligne 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var=$(echo "$ligne" | cut -f 1 -d ' ')

  3. #3
    psl
    psl est déconnecté
    Membre éprouvé
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Par défaut
    Re,
    Merci papajoker, cela fonctionne parfaitement.

    J'avais essayé plusieurs variantes de syntaxes y compris avec echo mais toujours la même erreur.
    Je n'avais pas mis les " pour $ligne.
    @+

  4. #4
    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,

    un simple read -d' ' var < /proc/uptime ça marche bien aussi, et c'est builtin pas besoin de spawner un process pour cat et un pour cut

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 101
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 101
    Par défaut
    Yop !
    Citation Envoyé par BufferBob Voir le message
    [...] c'est builtin pas besoin de spawner un process pour cat et un pour cut
    et c'est donc plus performant, alors, en toute logique ?

    Le souci (pour moi, mais je ne dois pas être le seul), c'est que je teste, ça fonctionne, super !, je note ça dans un coin car je n'en ai pas besoin aujourd'hui, et dans 6 mois quand j'en aurai vraiment besoin je l'aurai complètement oublié et je repartirai avec "echo", "cat", "cut", tout le toutim...

    Comment faire pour être toujours performant (je parle de la machine, là, pas de ma pomme ) ?

  6. #6
    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
    coucou Jipété,

    Citation Envoyé par Jipété Voir le message
    et c'est donc plus performant, alors, en toute logique ?
    ouai si on veut, en pratique ça n'a vraiment aucune incidence, on est en 2016 et c'est pas un processus de plus ou de moins qui va faire flancher la machine, c'est juste mon côté perfectionniste compulsif qui parle
    on aurait pu envisager pleins d'autres solutions, à coup de awk ou autre par exemple, juste que celle là est la plus smart *dans l'absolu*

    quant à mémoriser la technique je sais pas trop, une cure de magnésium peut-être ?

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 342
    Par défaut
    Bonjour,

    Pour ma part, lorsque l'on n'a pas beaucoup de ligne à lire, le read dans une boucle peut être suffisant, sinon celui-ci est trop lent.

    Le seul intérêt de la built-in est de ne pas faire appel à une commande extérieur qui pourrait ne pas exister sur certaines archi.

    Pour ce qui est de la performance, celle-ci se trouve en général dans l'algorithme utilisé. Si par exemple pour un fichier, tu arrives à le traiter en une seule passe, tu es bien souvent dans la solution optimum, après il y a des exceptions, comme par exemple des fichiers dont le format définie la taille d'un enregistrement et que selon le besoin, il suffit de ne modifier que le(s) enregistrement(s) concerné(s) sans avoir à lire tous les enregistrements.

    On pourrait aussi dire qu'avec les machines actuelles, il serait préférable de faire de l'enchainement de commande via des pipes car dans ce cas, l'OS peut nous faire profiter des multiples processeurs qu'il a, ce qui n'est pas encore le cas pour les built-in, et la latence se situerait donc plus sur les I/O.

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

Discussions similaires

  1. Résultat commande curl dans une variable
    Par Tonii dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 29/07/2014, 14h56
  2. [bash] Lire le résultat de wget dans une variable
    Par 6BerYeti dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 28/04/2014, 17h04
  3. Réponses: 9
    Dernier message: 14/12/2010, 12h18
  4. Résultat d'une commande DOS dans une variable
    Par tomix81 dans le forum Général Python
    Réponses: 2
    Dernier message: 18/05/2007, 11h02
  5. Réponses: 22
    Dernier message: 09/12/2005, 21h27

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