2015-10-14 13 views
5

Sto scrivendo uno script bash piuttosto banale; se rilevo un errore (non con uno stato di uscita errato da qualche altro processo) voglio uscire con uno stato di uscita che indica un errore (senza essere troppo specifico).Perché alcune persone escono -1 piuttosto che l'uscita 1 in caso di errore?

Sembra che dovrei fare exit 1 (ad esempio come da the TLDP Advanced Bash Scripting Guide e l'intestazione stdlib.h della Libreria standard C); tuttavia noto molte persone exit -1. Perché?

+1

Dove stai vedendo questo? – Random832

+0

@ Random832: In codice non accessibile da te :-(ma anche, ricordo di aver visto un sacco di exit -1 nel corso degli anni, non ci ho mai pensato molto. – einpoklum

+0

@ Random832: Un altro esempio per te - [qui sul sito] (http://stackoverflow.com/a/18880585/1593077) – einpoklum

risposta

5

L'ABS di TLDP ha una validità discutibile (nel senso che utilizza spesso, senza commenti, pratiche sub-par) quindi non lo prenderei come un particolare bastione di correttezza su questo.

I detti codici di ritorno comando valido sono compresi tra 0 e 255 con "0" con esito positivo ". Quindi sì, 1 è un codice di errore perfettamente valido (e comune).

Ovviamente non posso dire con certezza perché gli altri lo facciano ma ho due pensieri sull'argomento.

  1. Un errore di contesto (eventualmente combinato con una mancanza di conoscenza del dominio).

    In molte lingue un valore di ritorno di -1 da una funzione è un valore perfettamente valido e si distingue da tutti i valori positivi che potrebbero (normalmente si presume) essere restituiti.

    Quindi, tentare di estendere tale schema (che lo scrittore ha rilevato nel tempo) a uno script di shell/ecc. è una cosa ragionevole da fare per loro. Soprattutto se non hanno la conoscenza del dominio per rendersi conto che i codici di ritorno validi sono compresi tra 0255.

  2. Un tentativo di rendere tali linee di uscita di errore "risaltare" dai normali casi di uscita (che possono essere o non essere riusciti ad uscire autonomamente) nel tentativo di distinguere visivamente un certo insieme di casi di uscita estremamente improbabili o comunque straordinari.

    Un'uscita di -1 fa, in realtà, funziona solo non si ottiene un codice di ritorno di -1 si ottiene un codice di ritorno di 255. (Provare (exit -1); echo $? nella shell per vederlo.) Quindi questa non è una cosa del tutto irragionevole da voler fare (nonostante sia fonte di confusione e complice nel perpetrare una confusione sui codici di uscita).

Problemi correlati