È possibile scrivere una funzione che restituisca lo stato indicato come argomento o, 255
se non specificato, uno. (Lo chiamo perché ret
"restituisce" il suo valore.)
ret() { return "${1:-255}"; }
e utilizzare ret
al posto della chiamata a exit
. Questo evita l'inefficienza della creazione della sotto-shell nella risposta attualmente accettata.
Alcune misure.
time bash -c 'for i in {1..10000} ; do (exit 3) ; done ; echo $?'
sulla mia macchina impiega circa 3,5 secondi.
time bash -c 'ret(){ return $1 ; } ; for i in {1..10000} ; do ret 3 ; done ; echo $?'
sulla mia macchina impiega circa 0,051 secondi, 70 volte più veloce. L'inserimento della gestione predefinita lo lascia ancora 60 volte più veloce. Ovviamente il loop ha delle spese generali. Se cambio il corpo del loop in modo che sia solo :
o true
quindi il tempo viene dimezzato a 0,025, un ciclo completamente vuoto non è una sintassi non valida. L'aggiunta ;:
al ciclo mostra che questo comando minimo richiede 0,007 secondi, quindi il sovraccarico del ciclo è di circa 0,018. Sottrarre questo sovraccarico dai due test mostra che la ret
soluzione è oltre 100 volte più veloce.
Ovviamente questa è una misura sintetica, ma le cose si sommano. Se rendi tutto 100 volte più lento del necessario, allora finisci con i sistemi lenti. 0.0
exec exit 3
non c'è bueno, ottengo"exec: exit: not found"