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 :

Différence entre cde="commande" $cde et commande


Sujet :

Shell et commandes GNU

  1. #1
    bul
    bul est déconnecté
    Membre habitué Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 193
    Points : 133
    Points
    133
    Par défaut Différence entre cde="commande" $cde et commande
    bonjour à toutes et à tous,
    j'avoue ne pas comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #!/bin/sh
    find '.' -iname '*.sh' -exec grep -Hin 'if' {} \;
    cde='find "." -iname "*.sh" -exec grep -Hin "if" {} \;'
    $cde
    la commande find fonctionne
    mais $cde donne l'erreur :
    find: paramètre manquant pour « -exec »
    une explication ?
    j'ai tenté d'inverser les " et les ', sans succès.
    merci d'avance.

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    ça tient à l'échappement, donc au choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmde='find . -type f -exec grep machin {} \;'
    eval $cmde
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmde='find . -type f -exec grep machin {} ;'   # sans echapper le point-virgule final
    $cmde

  3. #3
    bul
    bul est déconnecté
    Membre habitué Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 193
    Points : 133
    Points
    133
    Par défaut
    merci BufferBob, ça baigne.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Bonjour,

    c'est une mauvaise pratique de mettre une commande aussi complexe dans une variable.

    utilise une fonction à la place.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    bul
    bul est déconnecté
    Membre habitué Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 193
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    mauvaise pratique...utilise une fonction à la place.
    quel intérêt ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Citation Envoyé par bull
    quel intérêt ?
    adopter la meilleure méthode !

    et pas besoin d'eval.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Citation Envoyé par bul Voir le message
    quel intérêt ?
    Une fonction, c'est fait pour. L'appel d'une fonction est lisible et respecte la grammaire du shell.

    Une variable, c'est fait pour stocker des données, éventuellement des arguments.
    ɹǝsn *sıɹɐlos*

  8. #8
    bul
    bul est déconnecté
    Membre habitué Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 193
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    adopter la meilleure méthode !
    et pas besoin d'eval.
    avec variable, eval pas obligatoire non plus
    pas convaincu

  9. #9
    bul
    bul est déconnecté
    Membre habitué Avatar de bul
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 193
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Une fonction, c'est fait pour. L'appel d'une fonction est lisible et respecte la grammaire du shell.
    Une variable, c'est fait pour stocker des données, éventuellement des arguments.
    plus convaincant. je vais adopter.
    merci à tous.

  10. #10
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Citation Envoyé par bul Voir le message
    avec variable, eval pas obligatoire non plus
    pas convaincu
    Dès que la commande est un tout petit peu complexe ou utilise elle-même des variables, on ne peut pas s'en sortir sans eval:

    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="echo hello ; pwd "
    $ $a
    hello ; pwd
    $ eval $a
    hello
    /tmp
    $ v=10
    $ a='echo $v'
    $ $a
    $v
    $ eval $a
    10
    $ a="echo $v"
    $ $a
    10
    $ v=20
    $ $a
    10
    ɹǝsn *sıɹɐlos*

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

Discussions similaires

  1. Différence entre ADO.net LINQ et commandes SQL
    Par ramzichouchan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/07/2015, 16h49
  2. Différence entre deux commande basées sur git push
    Par poussinvert dans le forum GIT
    Réponses: 5
    Dernier message: 22/05/2014, 17h35
  3. Réponses: 4
    Dernier message: 19/02/2014, 14h39
  4. Différence entre commands et command
    Par jo385 dans le forum Général VBA
    Réponses: 3
    Dernier message: 02/07/2008, 10h54
  5. Différence entre commands.getoutput() et os.popen()
    Par alison239 dans le forum Général Python
    Réponses: 3
    Dernier message: 07/03/2006, 10h52

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