favor ver http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html:
El valor de estado puede ser 0, EXIT_SUCCESS, EXIT_FAILURE, [CX] o cualquier otro valor, aunque sólo los 8 bits menos significativos (es decir , estado & 0377) estará disponible para un proceso padre en espera.
El estado de salida de unix solo tiene 8 bits. 256 desbordamientos así que supongo que el comportamiento en ese caso simplemente no está definido. Por ejemplo, esto sucede en Mac OS 10.7.3 con Ruby 1.9.3:
irb(main):008:0> `sh -c 'exit 0'`; $?
=> #<Process::Status: pid 64430 exit 0>
irb(main):009:0> `sh -c 'exit 1'`; $?
=> #<Process::Status: pid 64431 exit 1>
irb(main):010:0> `sh -c 'exit 2'`; $?
=> #<Process::Status: pid 64432 exit 2>
irb(main):011:0> `sh -c 'exit 255'`; $?
=> #<Process::Status: pid 64433 exit 255>
irb(main):012:0> `sh -c 'exit 256'`; $?
=> #<Process::Status: pid 64434 exit 0>
lo cual es consistente con lo que mi concha indica
$ sh -c 'exit 256'; echo $?
0
$ sh -c 'exit 257'; echo $?
1
Yo propondría a solucionar el shell-script (si posible) para devolver solo valores < 256.
¿Qué versión de Ruby? En 1.9.2-p180, '$ ?. exitstatus' devuelve el mismo valor que' $? 'En el intérprete de comandos para mí. Y en 1.8.7-p334, y 1.9.3-p0. ¿Qué sistema operativo? –
Sí, me sale '#'. –
Chuck