¿Hay un comando estándar que siempre sale con una falla?


42

Quiero probar mi script con un comando que falla. Podría usar un comando existente con malos argumentos. También podría escribir un script simple que salga inmediatamente con una falla. Ambos son fáciles de hacer y funcionan para mí, pero si hay un comando estándar para este propósito, me gustaría usarlo en su lugar.


false, pero también cualquier comando inexistente.
Kusalananda

Respuestas:


51

Se puede utilizar false( /bin/false, /usr/bin/falseo cáscara de orden interna):

$ false || echo It failed.
It failed.
$

También puede usar exit 1desde una subshell:

$ (exit 1) || echo Gosh, it failed too.
Gosh, it failed too.
$

Además, puede llamar de forma portátil a exit con cualquier número en el rango 1-255, inclusive. (La mayoría de los shells aplicarán una operación de módulo 255 en cualquier otro número dado para salir, por lo que en la práctica puede salirse con la suya con otros números, aunque solo están obligados a entrar en el rango mencionado anteriormente. Pero algunos shells harán otras cosas, por ejemplo, salir con un error de sintaxis (aunque sigue siendo un estado de falla) si se llama con un valor negativo Los sistemas tipo Unix solo admiten códigos de salida dentro del rango 0-255 inclusive, por lo que no puede confiar en un comportamiento bien definido para otros valores dados salir en todos los depósitos.)
mtraceur

1
Y como trivialidad, a menos que necesite portabilidad para conchas realmente viejas / oscuras, también puede hacerlo ! :(o cualquier otro comando que normalmente devuelve el éxito). !dice que niegue el estado de salida del comando que sigue. :es solo el comando noop builtin que siempre sale con éxito. (Solo asegúrese de dejar un espacio después !y antes de que se niegue el comando, de lo contrario, intentará analizarlo como un comando que comienza con un !carácter, o en el caso de shells como bashen el modo interactivo, lo analiza como uno de esos modificadores especiales de la historia.)
mtraceur
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.