Estoy probando algunos scripts que interactúan con los comandos del sistema. Su lógica depende del código de retorno de los comandos del sistema, es decir, el valor de $ ?. Por lo tanto, como un ejemplo simplificado, el guión podría decir:
def foo(command)
output=`#{command}`
if $?==0
'succeeded'
else
'failed'
end
end
Con el fin de ser capaz de probar estos métodos correctamente, me gustaría ser capaz de apagar el Kernel llamada backquote y establezca $? a un valor arbitrario, para ver si obtengo el comportamiento apropiado de la lógica en el método después de la llamada a la contraportada. ps es una variable de solo lectura, por lo que lo siguiente no funciona:
$? = some_number
Puedo hacer algunas cosas simples: por ejemplo, configurar $? a cero o distinto de cero. Por ejemplo, establecerá $? a 0 ó 35212 (en mi sistema, de todos modos), dependiendo del valor de $ ?:
def fail_or_succeed(success)
if success
`echo foo`
else
`a-non-existent-command 2>&1`
end
end
Lo que realmente me gustaría ser capaz de hacer es fijar $? a un valor específico (por ejemplo, 3 o 122), no solo cero o un valor arbitrario distinto de cero. No puedo encontrar una manera de hacer esto. (En caso de que importa, estoy probando el uso de Test :: Unidad y Mocha.)
Aha! Gracias, eso funciona. Probé tu idea, pero me perdí la parte .exitstatus. Estaba usando .to_i (en efecto), que devuelve (en su ejemplo) 5376, no 21. – rleber
@rleber: Podría ser tan simple como 'command = '(exit 21)'' (puede omitir el "bash - c "si lo envuelves entre paréntesis). –
@Dennis, Nice - es más simple y más confiable también (cuando bash no está en '$ PATH'). –