Tôi đang thử nghiệm một số tập lệnh giao diện với lệnh hệ thống. Logic của chúng phụ thuộc vào mã trả về của các lệnh hệ thống, tức là giá trị của $ ?. Vì vậy, như một ví dụ đơn giản, các kịch bản có thể nói:
def foo(command)
output=`#{command}`
if $?==0
'succeeded'
else
'failed'
end
end
Để có thể kiểm tra những phương pháp đúng, tôi muốn để có thể còn sơ khai ra Kernel backquote cuộc gọi, và đặt $? đến một giá trị tùy ý, để xem tôi có nhận được hành vi thích hợp từ logic trong phương thức sau cuộc gọi backquote hay không. $? là biến chỉ đọc, vì vậy các biến sau không hoạt động:
$? = some_number
Tôi có thể làm một số công cụ đơn giản: ví dụ: đặt $? không hoặc không khác. Ví dụ: sẽ đặt $? hoặc 0 hoặc 35212 (trên hệ thống của tôi, dù sao), tùy thuộc vào giá trị của $ ?:
def fail_or_succeed(success)
if success
`echo foo`
else
`a-non-existent-command 2>&1`
end
end
Điều tôi thực sự muốn làm là đặt $? với một giá trị cụ thể (ví dụ: 3 hoặc 122), không chỉ bằng 0 hoặc tùy ý khác. Tôi không thể tìm ra cách để làm điều này. (Trong trường hợp vấn đề, tôi đang thử nghiệm sử dụng Test :: Unit và Mocha.)
Aha! Cảm ơn, đó là công trình. Tôi đã thử ý tưởng của bạn, nhưng đã bỏ lỡ phần .exitstatus. Tôi đã sử dụng .to_i (có hiệu lực), trả về (trong ví dụ của bạn) 5376, không phải là 21. – rleber
@ rleber: Nó có thể đơn giản như 'command = '(exit 21)'' (bạn có thể bỏ qua "bash - c "nếu bạn quấn nó trong dấu ngoặc đơn). –
@ Dennis, Nice - nó đơn giản và đáng tin cậy hơn (khi bash không có trong '$ PATH'). –