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 :

Retourner une valeur depuis une fonction


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Par défaut Retourner une valeur depuis une fonction
    Bonjour bonjour,

    Alors j'ai bien lu certaines discussions sur ce forum qui expliquent que pour récupérer avec un script une valeur, il y a comme possibilité :
    • return : code relatif au statut de la fonction
    • envoyer le résultat voulu sur la console genre print ou echo
    • envoyer le résultat dans un fichier texte et utiliser le dit fichier


    Donc j'ai fait un script, qui défini une fonction, qui est appelée par un autre script, lequel autre doit récupérer un chemin...
    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
     
      1 #!/usr/bin/zsh
      2 # Vérifier que la partition est montée
      3 function verifpart(){
      4         local cible=$1
      5         local option_extra=$2
      6         findmnt -n --raw --evaluate --output=target LABEL=$1 &>/tmp/chemin
      7         if [[ $? = 1 ]]; then
      8 # Pas montée -> montage de la partition
      9 # Déjà définie dans fstab, donc pmount sans le label à la fin
     10                 print "\nMontage de $1\n"
     11                 pmount -w -u 077 $option_extra <$(/tmp/chemin)
     12                 if [ $? -ne 0 ]; then
     13                         return 1
     14                 fi;
     15         else
     16                 return 0
     17 fi;
     18 }
    Donc cette fonction sert à monter une partition si elle ne l'est pas, et renvoyer le chemin pour arriver aux fichiers de la partition.

    La partie pmount me pose encore des soucis, mais c'est pas là que je veux en venir pour l'instant.

    Le truc c'est que ne ligne de commande ça fonctionne, j'ai le chemin dans le fichier /tmp/chemin

    Par contre ce script ne renvoie rien du tout.

    Savez pourquoi ? Merci.

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 308
    Par défaut
    Bonjour

    Je réponds comme si on posait la question pour bash.
    • Le code retour indique s'il y a une erreur, et la nature de l'erreur (si différent de zéro).
    • Sinon, il y a les canaux. La sortie standard, comme tu le soulignes, mais il y a aussi la sortie d'erreur, et les canaux que tu peux créer ad hoc. Ceci est différent du code retour. Si on écrit sur le canal 2 (/dev/stderr par exemple) alors que le code retour est 5, on fournit un message d'erreur. Si on le fait alors que le code retour est 0, c'est avertissement.
    • Récupérer un code retour, pour le tester après, est maladroit. On fait tout dans la foulée.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      if pmount blablabla
      then
      fi
      ou plutôt, dans ton cas :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      if ! pmount blablabla
      then
      fi
    • Même remarque pour if et findmnt.
    • Je n'ai pas copié/collé la fin de pmount, car je doute qu'elle ait du sens. Es-tu sûr que ça veuille dire quelque chose <$(/tmp/chemin) ? En Bash, cela ne veut rien dire. Tu fais une substitution de commande, sans commande. Pourquoi ne pas utiliser le fichier redirigé directement ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Par défaut
    Merci de te pencher sur mon problème.

    Je ne comprends pas ta réponse ceci dit. Du coup, j'énonce mon problème autrement :

    la ligne 6 de mon code est dans une fonction appelée avec pour argument le label d'une partition. Cette ligne 6 me renvoie, si la partition est montée, le chemin en l'écrivant dans un fichier.
    Lequel fichier devient l'entrée de la deuxième partie avec pmount, mais laissons ça de côté pour l'heure comme je l'ai écrit suis pas sûr que ça fonctionne (par contre le <$(/tmp/chemin) fonctionne très bien, ça fourniot le contenu du fichier chemin comme argument à pmount.

    Bref, je truc c'est que je veux savoir pourquoi cette ligne 6 ne fait pas le job ? Y a pas de fichier /tmp/chemin écrit alors que quand je l'utilise directement en ligne de commande ça fonctionne au poil.

Discussions similaires

  1. Comment retourné une fonction objet?
    Par sidu12 dans le forum Services Web
    Réponses: 1
    Dernier message: 12/04/2011, 09h13
  2. retourné un tableau de valeur d'une fonction
    Par hoaxpunk dans le forum Oracle
    Réponses: 2
    Dernier message: 24/01/2006, 17h36
  3. Retourner un tableau depuis une fonction
    Par obalais dans le forum C++
    Réponses: 2
    Dernier message: 20/10/2005, 16h49
  4. fonction retournant une valeur
    Par ryan dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 17h45
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37

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