2015-10-14 13 views
5

Ich schreibe ein eher triviales Bash-Skript; Wenn ich einen Fehler feststelle (nicht mit einem schlechten Exit-Status von einem anderen Prozess), möchte ich mit einem Exit-Status beenden, der einen Fehler anzeigt (ohne zu spezifisch zu sein).Warum verlassen manche Leute -1 anstatt 1 bei einem Fehler?

Es scheint, als ob ich tun sollte exit 1 (z. B. wie the TLDP Advanced Bash Scripting Guide, und die C-Standard-Bibliothek stdlib.h Header); Aber ich merke viele Leute exit -1. Warum das?

+1

Wo siehst du das? – Random832

+0

@ Random832: In Code nicht zugänglich für dich :-(aber auch, ich erinnere mich an eine Reihe von Ausgang -1 's im Laufe der Jahre zu sehen, habe ich nur nie viel darüber nachgedacht. – einpoklum

+0

@ Random832: Ein anderes Beispiel für Sie - [hier auf der Website] (http://StackOverflow.com/a/18880585/1593077) – einpoklum

Antwort

5

Das ABS von TLDP ist von zweifelhafter Validität (da es oft ohne Kommentar sub-par Praktiken verwendet), also würde ich es nicht als eine besondere Bastion der Korrektheit betrachten.

Die genannten gültigen Rückkehrcodes sind zwischen 0 und 255 mit 0 "Erfolg". Also ja, 1 ist ein perfekt gültiger (und gemeinsamer) Fehlercode.

Offensichtlich kann ich nicht sicher sagen, warum andere Leute das tun, aber ich habe zwei Gedanken zu dem Thema.

  1. Ein Fehler beim Kontextwechsel (möglicherweise in Verbindung mit fehlendem Domänenwissen). In vielen Sprachen ist ein Rückgabewert von -1 von einer Funktion ein perfekt gültiger Wert und hebt sich von allen positiven Werten ab, die normalerweise (wie man annimmt) zurückgegeben werden.

    Also versuchen, das Muster (das der Schreiber im Laufe der Zeit aufgenommen hat) zu einem Shell-Skript/etc zu erweitern. ist eine vernünftige Sache für sie zu tun. Vor allem, wenn sie nicht über das Domänenwissen verfügen, um zu erkennen, dass gültige Rückgabecodes zwischen 0255 liegen.

  2. Ein Versuch, diese Fehlerausgangszeilen von normalen Ausstiegsfällen (die erfolgreich sein können oder nicht erfolgreich sind) abzuheben, um visuell eine bestimmte Menge extrem unwahrscheinlicher oder anderweitig außergewöhnlicher Ausstiegsfälle zu unterscheiden.

    Ein Ausgang von -1 ist es eigentlich, einfach nicht funktionieren Sie es Sie nicht bekommen einen Return-Code von -1 Code von 255 eine Rückkehr bekommt. (Versuchen Sie (exit -1); echo $? in Ihrer Schale, um das zu sehen.) Also das ist nicht eine völlig unvernünftige Sache zu wollen (obwohl es verwirrend und mitschuldig ist, eine Verwirrung über Exit-Codes zu begehen).