sirve scripts script que programas programacion pasar parametros para español ejemplos comandos comando c bash return-value ubuntu-10.04

scripts - ¿Cuál es el rango válido para el valor de retorno del programa en Linux/bash?



scripts bash ejemplos (3)

Cuando un programa finaliza, puede devolver al proceso principal una pequeña cantidad de información sobre la causa de la finalización, utilizando el estado de salida. Este es un valor entre 0 y 255 que el proceso de salida pasa como argumento para salir.

http://www.gnu.org/s/hello/manual/libc/Exit-Status.html

alternativamente:

http://en.wikipedia.org/wiki/Exit_status

provino de "códigos de retorno posix" y "c códigos de retorno" respectivas búsquedas de Google.

Esta pregunta ya tiene una respuesta aquí:

Tengo un programa C que devuelve un valor entero. Me sorprendió descubrir que al examinar el valor de retorno desde el intérprete de comandos del shell obtengo el valor de módulo 256.

/* prog.c */ int main(...) { return 257; }

-

> ./prog.e > echo $? 1

  • ¿Por qué no veo el entero entero?
  • ¿Dónde está documentado este comportamiento?
  • ¿Cómo puedo obtener todo el valor de 32 bits para el shell?

El estado de devolución se explica (más o menos) en la wait y las llamadas de sistema relacionadas.

Básicamente:

WEXITSTATUS (stat_val)
Si el valor de WIFEXITED (stat_val) no es cero, esta macro evalúa los 8 bits de bajo orden del argumento de estado que el proceso hijo pasó a _exit () o exit () , o el valor que el proceso hijo devolvió desde main ().

Por lo tanto, está limitado a 8 bits. No puedes obtener más que eso de manera portátil. (Y no sé los métodos dependientes del sistema para obtener más).


La explicación está justo en la parte superior de la man exit de man exit :

The exit() function causes normal process termination and the value of status & 0377 is returned to the parent (see wait(2)).

En otras palabras, solo los 8 bits más bajos se propagan al proceso principal.

En este sentido, devolver el código de salida desde main() no es diferente a pasarlo a exit() .