web-dev-qa-db-fra.com

Quelles sont les valeurs de sortie d'erreur pour diff?

Sur la page de manuel diff, j'ai trouvé ces valeurs de sortie:

    0     No differences were found. 
    1     Differences were found.
   >1     An error occurred.

Existe-t-il différentes valeurs de sortie supérieures à 1 pour différentes erreurs?

54
sid_com

Cela dépend de votre commande diff. Le mien (GNU diffutils 3.0) dit:

Un état de sortie de 0 signifie qu'aucune différence n'a été trouvée, 1 signifie que des différences ont été trouvées et 2 signifie des ennuis. Normalement, des fichiers binaires différents comptent comme des problèmes, mais cela peut être modifié en utilisant le -a ou --text ou l'option -q ou --brief option.

57
Frédéric Hamidi

Il peut y avoir, ou il peut ne pas y avoir de codes d'erreur différents selon la version du diff que vous utilisez. Si je me souviens bien, le diff BSD standard renvoyait toujours un code de sortie de 0, 1 ou 2.

Cependant, la page de manuel ne représente pas tout ce que diff pourrait faire, mais la documentation que vous pouvez utiliser pour utiliser la commande diff. Dans un script Shell, je veux savoir si les fichiers correspondent (exit = 0) ou ne correspondent pas (exit = 1). Cependant, dans mon script Shell, je veux également savoir que la commande diff elle-même n'a pas fonctionné.

diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 0 ]
then
   echo "$file1 and $file2 are the same file"
Elif [ $error -eq 1 ]
then
   echo "$file1 and $file2 differ"
else
   echo "There was something wrong with the diff command"
fi

Imaginez que l'on me dise que 2 signifiait que la commande diff a échoué, mais une version plus récente de la commande diff faisait une distinction entre un fichier que vous ne pouvez pas lire (exit = 2) et un fichier manquant (exit = 3). Maintenant, imaginez si j'ai fait ce qui suit dans une version antérieure de la commande diff, mais $file2 n'existait pas:

diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 2 ]
then
   echo "There was something wrong with the diff command"
Elif [ $error -eq 1 ]
then
   echo "$file1 and $file2 differ"
else
   echo "$file1 and $file2 are the same file"
fi

Dans le code ci-dessus, j'ai vérifié le code d'erreur 2 et 1, mais pas 3. Donc, au lieu de détecter un fichier manquant, je suppose que les fichiers correspondent.

La page de manuel essaie de s'assurer que les futures mises à niveau du système d'exploitation n'entraînent pas l'échec soudain de la plupart de vos scripts Shell. C'est pourquoi il y avait une commande awk et nawk distincte et une commande grep et egrep distincte.

* Mis à jour selon le commentaire de @chus.

7
David W.

Dans mon cas, diff a renvoyé 127, l'a recherché et l'a trouvé dans le tldp.org "Codes de sortie avec des significations spéciales"

127 "commande introuvable" commande_ illégale Problème possible avec $ PATH ou une faute de frappe.

J'ai utilisé un chemin incorrect pour faire la différence. :)

Police: tldp.org/LDP/abs/html/exitcodes.html

3
Rossano Fenner