Apagar, reiniciar o tancar la sessió a LinuxComandes LinuxLinux

La comanda exit a Linux: sortir del shell i codis de sortida als scripts



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, exit torna 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

CodiSignificat habitual
0Èxit
1Error general
2Ús incorrecte (moltes comandes el fan servir per opcions errònies; ls per a fitxers que no troba)
126La comanda existeix però no es pot executar (per exemple, no té permís d’execució)
127Comanda no trobada
128+NEl 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…

  • exit en un script carregat amb source (o amb .): l’script s’executa dins del teu shell, de manera que exit tanca el teu terminal. En scripts pensats per carregar-se amb source, i dins de les funcions, fes servir return.
  • exit dins 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