2016-11-15 2 views
1

J'ai un programme qui teste le code d'erreur d'un script/commande que je fournis. Dans certains cas, la ligne de commande renvoie un code d'erreur d'avertissement que je voudrais ignorer (quitter avec 0 au lieu de 5). Je voudrais que d'autres codes d'erreur passent le même, et que cela soit aussi simple que possible (pour garder une seule ligne de commande).bash ignore le code d'erreur spécifique (pytest ne teste pas le code d'erreur d'avertissement 5)

J'ai essayé d'utiliser pytest || [ $? -eq 5 ], qui ignore le code d'erreur 5 provenant de la commande, mais remplacera tous les codes d'erreur non nuls par 1 (au lieu du code d'erreur réel).

je suppose que quelqu'un de plus expérimenté que moi avec bash pourrait trouver une meilleure solution plus rapide que moi

un contexte plus précis:

J'utilise pytest pour tester mes projets. Certains d'entre eux n'ont aucun test pour le moment et le comportement par défaut de pytest est de traiter cela comme une erreur (code d'erreur 5). Je voudrais traiter cette erreur comme un succès. En fait, j'aimerais que Travis menace cette erreur comme un succès.

Merci!

Répondre

2

utilisant l'expression arithmétique:

exit $(($? == 5 ? 0 : $?)) 
2

Vous avez juste à attraper, tester et (re) élever le statut approprié.

command 
case $? in 
    5) exit 0 ;; 
    *) exit ;; 
esac 
0

je fini par faire ce qui suit:

pytest ... ; err=$? ; if (($err != 5)) ; then exit $err ; fi 

Parce que pour une raison quelconque la réponse de Ruslan avait échapper à des problèmes lors de Travis a exécuté la réponse, et chepner semble pas aussi propre.