web-dev-qa-db-fra.com

Forcer "mauvais" (pas 0) le code retour de la commande du terminal?

J'ai un framework écrit en python, et à des fins de test, je veux fondamentalement faire un sous-processus (aka call call) ... qui devrait simplement revenir avec un RC! = 0. J'ai essayé d'appeler un exécutable non existant; ou exécuter "sortie 1"; mais ceux-ci sont, pour une raison quelconque, traduits en FileNotFoundError.

Alors, que puis-je faire d'autre pour déclencher un code de retour! = 0 (de manière "fiable"; cela signifie que la commande ne doit pas renvoyer soudainement le 0 à un moment ultérieur).

Je pensais "chercher" un binaire appelé exit, mais bon:

> /usr/bin/env exit
/usr/bin/env: exit: No such file or directory
7
GhostCat

Si vous recherchez une commande system qui renvoie toujours un code de sortie différent de zéro, alors /bin/false semble bien fonctionner. De man false:

NAME
       false - do nothing, unsuccessfully

SYNOPSIS
       false [ignored command line arguments]
       false OPTION

DESCRIPTION
       Exit with a status code indicating failure.
16
steeldriver

Vous pouvez créer un nouveau code de retour avec la commande bash -c "exit RETURNCODE", en remplaçant "RETURNCODE" par un nombre quelconque. Notez qu'il sera coupé à un entier non signé de 8 bits (0 ... 255) par (RETURNCODE mod 256)

Vous pouvez vérifier le code de retour de la dernière commande Shell à l'intérieur du terminal (!) en exécutant echo $?. Le "$?" variable contient le code de retour le plus récent et "echo" l’affiche sur la sortie standard.

6
Byte Commander

Après quelques essais supplémentaires, j'ai constaté que mon problème n'était pas du côté "Linux".

Python a un module shlex; qui devrait être utilisé pour "scinder" les chaînes de commande. Lorsque j'ai modifié l'appel de mon sous-processus pour utiliser la sortie de shlex.split(), l'appel de "bash exit 1" me donne ce dont j'ai besoin.

0
GhostCat