J'explore actuellement des paquets Debian et j'ai lu des exemples de code. Et sur chaque ligne, par exemple, le script postinst
est un modèle.
some command || true
another command || true
Donc, si une commande échoue, la ligne renvoie true mais je ne vois pas comment cela affecte la sortie du programme.
La raison de ce modèle est que les scripts de maintenance dans les paquets Debian ont tendance à commencer par set -e
, ce qui provoque la fermeture du shell dès qu'une commande (à proprement parler, pipeline, liste ou commande composée) se termine avec un état différent de zéro. Cela garantit que les erreurs ne s'accumulent pas: dès que quelque chose se passe mal, le script s'interrompt.
Dans les cas où une commande du script est autorisée à échouer, l'ajout de || true
garantit que la commande composée résultante se termine toujours avec le statut zéro, afin que le script ne s'interrompe pas. Par exemple, la suppression d'un répertoire ne doit pas être une erreur fatale (empêcher la suppression d'un package); nous utiliserions donc
rmdir ... || true
puisque rmdir
n'a pas d'option pour lui dire d'ignorer les erreurs.
Bien qu'il n'affecte pas la sortie du programme, il suffit de l'exécuter - il permet à l'appelant de procéder comme si tout allait bien, ce qui affecte la logique future.
Reformulé: il masque l'erreur status de la commande précédente.
michael@x071:[/usr/sbin]cat /tmp/false.sh
#!/bin/sh
false
michael@x071:[/usr/sbin]cat /tmp/true.sh
#!/bin/sh
false || true
michael@x071:[/usr/sbin]sh /tmp/false.sh; echo $?
1
michael@x071:[/usr/sbin]sh /tmp/true.sh; echo $?
0