Patrz http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html:
Wartość stanu może wynosić 0, EXIT_SUCCESS, EXIT_FAILURE [CX] lub inną wartość, podczas gdy jedynie Ostatnie 8 znaczących bitów (czyli , status & 0377) będzie dostępny dla oczekującego procesu macierzystego.
Status wyjścia uniksowego ma tylko 8 bitów. 256 przepełnień, więc myślę, że zachowanie w tym przypadku jest po prostu niezdefiniowane. Na przykład dzieje się na Mac OS 10.7.3 z 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>
co jest zgodne z tym, co moja skorupa wskazuje
$ sh -c 'exit 256'; echo $?
0
$ sh -c 'exit 257'; echo $?
1
chciałbym zaproponować Ci naprawić skrypt powłoki (jeśli możliwe), aby zwrócić tylko wartości < 256.
Jaka wersja Ruby? W 1.9.2-p180 "$. Exitstatus" zwraca dla mnie w powłoce tę samą wartość, co '$?'. I w 1.8.7-p334 i 1.9.3-p0. Jaki system operacyjny? –
Tak, otrzymuję '#'. –
Chuck