Existe-t-il une commande standard qui se termine toujours par un échec?


42

Je veux tester mon script avec une commande qui échoue. Je pourrais utiliser une commande existante avec de mauvais arguments. Je pourrais aussi écrire un script simple qui se termine immédiatement avec un échec. Les deux sont faciles à faire et fonctionnent pour moi, mais s'il existe une commande standard à cet effet, j'aimerais l'utiliser à la place.


false, mais aussi toute commande inexistante.
Kusalananda

Réponses:


51

Vous pouvez utiliser false( /bin/false, /usr/bin/falseou SHELL):

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

Vous pouvez également utiliser exit 1un sous-shell:

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

De plus, vous pouvez appeler de manière portable l'exit avec n'importe quel numéro compris entre 1 et 255. (La plupart des obus appliquent une opération modulo 255 sur tous les autres numéros donnés. Ainsi, en pratique, vous pouvez vous échapper avec d’autres numéros bien qu’ils soient forcés dans la plage susmentionnée. Mais certains obus feront d’autres choses, par exemple avec une erreur de syntaxe (toujours un état d'échec si elle est appelée avec une valeur négative. Les systèmes de type Unix prennent en charge uniquement les codes de sortie compris entre 0 et 255, raison pour laquelle vous ne pouvez pas vous fier à un comportement bien défini pour les autres valeurs données. de sortir dans tous les coquillages.)
mtraceur

1
Et comme un détail, à moins que vous n'ayez besoin de portabilité pour des shells vraiment vieux / obscurs, vous pouvez également le faire ! :(ou toute autre commande qui renvoie normalement le succès). !dit de nier le statut de sortie de la commande qui suit. :est juste la commande intégrée noop qui se termine toujours avec succès. (Assurez-vous simplement de laisser un espace après !et et avant que la commande soit annulée, sinon il essaiera de l'analyser comme une commande commençant par un !caractère - ou, dans le cas de shells comme bashen mode interactif, il les analysera comme l'une des commandes suivantes: ces modificateurs d'histoire spéciaux.)
mtraceur
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.