Xin xem http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html:
Giá trị của tình trạng có thể là 0, EXIT_SUCCESS, EXIT_FAILURE, [CX] hoặc bất kỳ giá trị khác, mặc dù chỉ có ít nhất 8 bit có ý nghĩa (có nghĩa là , trạng thái & 0377) sẽ có sẵn cho quá trình cha mẹ đang chờ.
Trạng thái thoát unix chỉ có 8 bit. 256 tràn vì vậy tôi đoán hành vi trong trường hợp đó chỉ đơn giản là không xác định. Ví dụ điều này xảy ra trên Mac OS 10.7.3 với 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>
nào là phù hợp với những gì vỏ của tôi chỉ ra
$ sh -c 'exit 256'; echo $?
0
$ sh -c 'exit 257'; echo $?
1
Tôi muốn đề nghị bạn sửa chữa vỏ kịch bản (nếu có thể) để chỉ trả về các giá trị < 256.
gì phiên bản của Ruby? Trong 1.9.2-p180, '$ ?. exitstatus' trả về cùng giá trị với' $? 'Trong shell cho tôi. Và trong 1.8.7-p334 và 1.9.3-p0. Hệ điều hành nào? –
Vâng, tôi nhận được '#'. –
Chuck