Forum Programmation.shell récupérer le status en sortie d'un applicatif dans un shell

Posté par  .
Étiquettes : aucune
0
17
août
2009
dans un shell je lance un programme écrit en c++ :

./monprogramme

je voudrais récupérer la valeur passée dans le exit() au moment de la sortie du programme dans une variable du shell. par exemple le programme fait un exit(-6) et je voudrais retrouver -6 dans une variable pour faire un echo $monresult par exemple.

j'ai tenté avec $? mais je récupère toujours 0 quelque soit la valeur mise dans le exit() de mon programme ... :-(

help me
  • # Peux tu nous donner un exemple de code stp ?

    Posté par  . Évalué à 9.

    Il faudrait :
    1/ le code faisant appel a Exit dans ton prog C++
    2/ les commandes shell que tu passes pour récuperer ce code.

    Note également que la variable $? est renseignée lors de chaque appel de commande ou de prog. J'ai pour habitude de faire des trucs du genre :

    commande_shell param1 param2
    RETOUR=$?
    .....
    echo $RETOUR
  • # Je penche pour une erreur humaine.

    Posté par  . Évalué à 2.

    «j'ai tenté avec $? mais je récupère toujours 0 quelque soit la valeur mise dans le exit() de mon programme ... :-(»

    C'est bizarre, t'es sûr qu'il est executé ton exit() ?
  • # Chezmoiçamarche™

    Posté par  (site web personnel) . Évalué à 3.

    T'est sûr que tu fais pas un "ls" ou une autre commande avant d'afficher $?


    % cat toto.cpp
    #include
    using namespace std;
    int main (int argc, char *argv[]) {
    int exitValue = 42;
    cout << "exitValue : " << exitValue << endl;
    exit(exitValue);
    }
    % g++ toto.cpp -o toto
    % ./toto
    exitValue : 42
    % echo $?
    42
    %
    • [^] # Re: Chezmoiçamarche™

      Posté par  . Évalué à -1.

      Le plus simple c'est de faire
      ./monprogramme ; echo $?

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # attention

    Posté par  . Évalué à 4.

    il faut bien renvoyer un statut dans exit et *surtout pas* des datas.
    Accessoirement, on ne peut pas renvoyer trop de status non plus.
    En tout cas, chez moi :

    $ cat main.c
    #include <stdlib.h>
    int main (int argc, char *argv[]) {
    int exitValue = -1;
    exit(exitValue);
    }
    $ gcc main.c; ./a.out; echo $?
    255

    autrement dit, mon shell récupère un unsigned byte.
  • # 0-255

    Posté par  . Évalué à 3.

    Peut être le code de retour doit il être entre 0 et 255 ?

    Je lis ici ( http://www.faqs.org/docs/abs/HTML/exit-status.html ) par exemple :

    Likewise, functions within a script and the script itself return an exit status. The last command executed in the function or script determines the exit status. Within a script, an exit nnn command may be used to deliver an nnn exit status to the shell (nnn must be a decimal number in the 0 - 255 range).
  • # ok c'est good

    Posté par  . Évalué à 2.

    merci erreur bête effectivement il faut bien récupérer de suite après l'appel avec un result=$? sinon nada ! et -6 dans exit donne 250 à l'arrivée donc un unsigned int effectivement. merci à tous.
  • # Zsh est ton ami

    Posté par  . Évalué à 1.

    Pour rappel dans zsh tu peut afficher ce code dans ton prompt :
    %(?.. [%?])

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.