exit fa sortir del shell amb un codi de sortida. Al terminal, tanca la sessió o la finestra; dins d’un script, n’atura l’execució en aquell punt i li diu al programa que l’ha cridat si tot ha anat bé o no. És una comanda interna de Bash (i de tots els shells), no un programa a part.
Sintaxi
exit [n]
nés el codi de sortida, un número de 0 a 255. Per convenció, 0 vol dir que tot ha anat bé i qualsevol altre valor indica un error.- Sense
n,exittorna el codi de l’última comanda executada.
Exemples al terminal
Tancar el terminal o desconnectar-te d’una sessió SSH:
$ exit
logout
Connection to servidor.exemple.com closed.
Si havies obert un shell dins d’un altre (per exemple amb sudo -i, su - o simplement bash), exit només surt del més intern i tornes a l’anterior.
Si tens treballs aturats amb Ctrl+Z, el primer exit t’avisa amb There are stopped jobs. i no surt; si el repeteixes, els tanca i surt.
Ctrl+D en una línia buida fa el mateix que exit en un shell interactiu.
Exemples en scripts
Un script que comprova que el fitxer existeix abans de continuar:
#!/bin/bash
if [ ! -f "$1" ]; then
echo "Error: el fitxer '$1' no existeix" >&2
exit 1
fi
echo "Processant $1..."
exit 0
$ ./prova.sh noexisteix.txt
Error: el fitxer 'noexisteix.txt' no existeix
$ echo $?
1
$ ./prova.sh dades.txt
Processant dades.txt...
$ echo $?
0
La variable $? guarda el codi de sortida de l’última comanda. Gràcies a això pots encadenar scripts:
./prova.sh dades.txt && echo "Tot correcte" || echo "Hi ha hagut un error"
Codis de sortida que convé conèixer
| Codi | Significat habitual |
|---|---|
0 | Èxit |
1 | Error general |
2 | Ús incorrecte (moltes comandes el fan servir per opcions errònies; ls per a fitxers que no troba) |
126 | La comanda existeix però no es pot executar (per exemple, no té permís d’execució) |
127 | Comanda no trobada |
128+N | El procés ha acabat pel senyal N (per exemple, 130 = Ctrl+C, senyal 2) |
El codi només pot anar de 0 a 255: exit 300 torna 44 (300 − 256) i exit -1 torna 255. Fes servir sempre valors dins d’aquest rang.
Fer neteja abans de sortir: trap ... EXIT
Si l’script crea fitxers temporals, pots fer que s’esborrin sempre, surti per on surti:
#!/bin/bash
tmp=$(mktemp)
trap 'rm -f "$tmp"' EXIT
# ... feina amb "$tmp" ...
exit 0
El trap s’executa just abans que l’script acabi, tant si arriba al final com si troba un exit a mig camí.
Compte amb…
exiten un script carregat ambsource(o amb.): l’script s’executa dins del teu shell, de manera queexittanca el teu terminal. En scripts pensats per carregar-se ambsource, i dins de les funcions, fes servirreturn.exitdins de parèntesis( ... ): només surt d’aquest subshell, no de l’script.
$ bash -c '(exit 5); echo "subshell: $?"; echo segueix'
subshell: 5
segueix
Correcció respecte a la versió antiga d’aquest post
L’exemple original feia servir [ "$condicio" -eq 1 ]. Funciona, però si la variable és buida dona l’error integer expression expected. Quan comparis números que poden faltar, posa un valor per defecte: [ "${condicio:-0}" -eq 1 ].
Comandes relacionades
logout: tancar un shell d’inici de sessió.- Les comandes internes de Bash:
exit,cd,sourcei companyia. - Shell scripting: automatitzar tasques amb scripts.
- /bin/bash: guia completa: tot sobre el shell Bash.