Esiste un comando standard che esce sempre con un errore?


42

Voglio testare la mia sceneggiatura con un comando che non riesce. Potrei usare un comando esistente con argomenti sbagliati. Potrei anche scrivere un semplice script che esce immediatamente con un errore. Entrambi sono facili da fare e lavorare per me, ma se esiste un comando standard per questo scopo, mi piacerebbe usarlo invece.


false, ma anche qualsiasi comando inesistente.
Kusalananda

Risposte:


51

È possibile utilizzare false( /bin/false, /usr/bin/false, o shell built-in):

$ false || echo It failed.
It failed.
$

Puoi anche usare exit 1da una subshell:

$ (exit 1) || echo Gosh, it failed too.
Gosh, it failed too.
$

Inoltre, puoi chiamare in modo portabile l'uscita con qualsiasi numero compreso nell'intervallo 1-255, incluso. (La maggior parte delle shell applicherà un'operazione modulo 255 su tutti gli altri numeri dati per uscire, quindi in pratica puoi cavartela con altri numeri anche se sono solo costretti nell'intervallo di cui sopra. Ma alcune shell faranno altre cose, ad esempio esci con un errore di sintassi (comunque uno stato di errore) se chiamato con un valore negativo. I sistemi simili a Unix supportano solo codici di uscita compresi nell'intervallo 0-255 incluso, motivo per cui non è possibile fare affidamento su un comportamento ben definito per altri valori forniti per uscire in tutte le conchiglie.)
mtraceur,

1
E come un po 'di curiosità, a meno che non sia necessaria la portabilità a shell davvero vecchie / oscure, è anche possibile fare ! :(o qualsiasi altro comando che normalmente restituisce successo). !dice di annullare lo stato di uscita del comando che segue. :è solo il comando incorporato noop che esce sempre con successo. (Assicurati di lasciare uno spazio dopo il !e prima che il comando venga annullato, altrimenti proverà ad analizzarlo come un comando che inizia con un !carattere - o nel caso di shell come bashin modalità interattiva, lo analizza come uno di quei modificatori di storia speciali.)
mtraceur,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.