2010-02-22 2 views
5

J'ai un script bash dans lequel je vérifie le code de sortie d'une dernière commande en utilisant $? variable mais maintenant j'exécute un programme C (à partir de ce script) qui retourne 0 si le programme est exécuté avec succès. Est-ce que je peux attraper cette valeur de retour du programme C avec dans mon script bash?Vérification de la valeur de retour d'un programme C dans un script bash?

Je crois que différentes commandes comme awk, sed etc. sont écrites en C. Comment utilisent-elles $? pour stocker leurs codes de sortie en elle? Comment puis-je faire mon programme C pour stocker son code de sortie en $ ??

J'espère que ma question est claire.

Répondre

11

Il n'y a pas besoin de faire quoi que ce soit - si votre programme C renvoie 0, c'est ce qui sera stocké dans la variable $? du shell qui l'a exécuté.

+0

Le statut de sortie est limité à seulement 8 bits, donc seulement les 8 bits les plus bas de ce que le programme retourne seront stockés dans $? –

+0

@Chris Dodd - POSIX limite la valeur de retour de 0 à 255, de sorte que le stockage 8 bits n'est pas un problème là-bas, c'est une optimisation. –

1

bash attrape le code de sortie dans $? automagiquement. Ou vous pouvez simplement utiliser la commande dans if si vous ne vous souciez que de zéro/non nul.

1

Le code retour d'un programme C est la valeur renvoyée par la fonction int main() ou l'argument de la fonction exit(). Le système le met ensuite à la disposition de son processus parent via l'appel système wait(). Lorsque le processus parent est bash, cette valeur est ensuite rendue disponible via la variable $?.

+0

Qu'est-ce qui vous fait penser à errno? –

+0

Je fais l'hypothèse qu'un nouveau processus est créé avec 'fork()' et sa page de manuel le mentionne. Ai-je tort? – mouviciel

+0

Eh bien, Windows (sur lequel j'utilise bash) n'a pas fork(). Et dans plus de 25 ans de programmation UNIX, je n'ai jamais vu aucune suggestion que errno est associé à la valeur de sortie d'un processus. Je ne dis pas que vous avez tort, mais j'aurais besoin de chapitre et de verset avant de dire que vous avez raison. –

Questions connexes