2010-02-22 21 views
5

Tengo un script bash en el que verifico el código de salida de un último comando de ejecución usando $? variable pero ahora estoy ejecutando un programa C (desde ese script) que devuelve 0 si el programa se ejecuta con éxito. ¿Hay alguna forma de que pueda capturar este valor de retorno del programa C en mi script bash?Comprobando el valor de retorno de un programa C en un script bash?

Creo que comandos diferentes como awk, sed, etc. están escritos en C. ¿Cómo usan $? para almacenar sus códigos de salida en ella? ¿Cómo puedo hacer que mi programa C almacene su código de salida en $ ??

Espero que mi pregunta sea clara.

Respuesta

11

No hay necesidad de hacer nada: si su programa C devuelve 0, eso es lo que se almacenará en la variable $? del shell que lo ejecutó.

+0

El estado de salida está limitado a solo 8 bits, por lo que solo los 8 bits más bajos de lo que devuelve el programa terminarán almacenados en $? –

+0

@Chris Dodd: POSIX limita el valor de retorno de 0 a 255 de todos modos, por lo que el almacenamiento de 8 bits no es un problema, es una optimización. –

1

bash capta el código de salida en $? automágicamente. O simplemente puede usar el comando en if si solo le importan cero/no son cero.

1

El código de retorno de un programa C es el valor devuelto por la función int main() o el argumento de la función exit(). El sistema luego lo pone a disposición de su proceso principal a través de la llamada al sistema wait(). Cuando el proceso principal es bash, este valor está disponible a través de la variable $?.

+0

¿Qué te hace pensar que Errno está involucrado? –

+0

Supongo que se crea un nuevo proceso con 'fork()' y su página de manual menciona eso. ¿Me equivoco? – mouviciel

+0

Bueno, Windows (en el que utilizo bash) no tiene fork(). Y en más de 25 años de programación de UNIX, nunca he visto ninguna sugerencia de que errno esté asociado con el valor de salida de un proceso. No digo que estés equivocado, pero necesitaría capítulo y versículo antes de decir que tienes razón. –

Cuestiones relacionadas