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 :

Comparer 2 fonctions qui renvoient du string


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut Comparer 2 fonctions qui renvoient du string
    Bonjour,

    J'ai ces 2 fonctions dans un script qui permettent de savoir si les 2 fichiers concernés dans un dossier sont bien présent .
    La commande "ls" serait plus facile à écrire , mais comme il se pourrait qu'elle pose des problèmes de portabilité , j'ai fais un clone avec "find" .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function f1 { find  -maxdepth 1 -name 'actions.txt' ; find -maxdepth 1 -name 'answers.txt'; }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function f2 { echo -e "./actions.txt\n./answers.txt"; }
    J'essaye de comparer leur résultat mais sans succés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if [ $(f2) = $(f1) ];then echo ok;fi
    bash: [: ./answers.txt: binary operator expected

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    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 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Bonjour,

    L'erreur rencontré lors du check est parce que tu n'encadres pas tes appelles de fonction par des guillemets et donc le test voit plusieurs chaines au lieu d'en voir une seule de chaque coté du signe, donc la bonne syntaxe serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ "$(f2)" = "$(f1)" ];then echo ok;fi
    Maintenant, ceci te contraint de faire autant de find que de fichier à tester, car le find affiche les fichiers dans l'ordre d'apparition sur le FS.

    Pourquoi, tu n'utilises pas directement l'option -f:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ -f "./actions.txt" -a -f "./answers.txt" ];then echo ok;fi

  3. #3
    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
    LE "./" n'est plus requis et si les noms sont simples comme ici, on peut aussi enlever les guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ -f actions.txt -a -f answers.txt ];then echo ok;fi

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    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 309
    Points : 12 817
    Points
    12 817
    Par défaut
    L'éternel débat du cas spécifique vis à vis du cas général

  5. #5
    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
    Oui, en utilisant des variables au lieu de constantes, ./ et les guillemets sont pleinement justifiés.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/04/2011, 20h05
  2. Réponses: 5
    Dernier message: 23/05/2007, 19h43
  3. [C#] Fonction comme MessageBox mais qui renvoie un string
    Par kinou dans le forum Windows Forms
    Réponses: 5
    Dernier message: 19/05/2006, 11h40
  4. Réponses: 15
    Dernier message: 15/12/2005, 14h36

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