prego vedere http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html:
Il valore di stato può essere 0, EXIT_SUCCESS, EXIT_FAILURE, [CX] o qualsiasi altro valore, anche se solo le 8 bit meno significativi (cioè , stato & 0377) deve essere disponibile per un processo padre in attesa.
Lo stato di uscita unix ha solo 8 bit. 256 overflow quindi suppongo che il comportamento in quel caso sia semplicemente indefinito. Per esempio questo accade su 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>
che è coerente con quello che il mio guscio indica
$ sh -c 'exit 256'; echo $?
0
$ sh -c 'exit 257'; echo $?
1
mi piacerebbe propongo di fissare lo script di shell (se possibile) per restituire solo i valori < 256.
Quale versione di Ruby? In 1.9.2-p180, '$ ?. exitstatus' restituisce lo stesso valore di' $? 'Nella shell per me. E in 1.8.7-p334 e 1.9.3-p0. Quale sistema operativo? –
Sì, ricevo '#'. –
Chuck