Diccionario

Código de salida

El número que devuelve un programa al terminar: 0 si todo fue bien y otro valor si hubo un error.

Cada programa termina con un número que el sistema guarda. Por convención, 0 es éxito y cualquier otro número indica un tipo de error.

Los scripts lo usan para decidir qué hacer: en Bash está en $? y los operadores && y || actúan según él; en PowerShell se consulta $LASTEXITCODE.

Un ejemplo

cp datos.csv copia/ && echo "Copiado" solo muestra «Copiado» si cp terminó con código 0.

Por qué importa

Cuando un programa termina, devuelve al sistema un número que indica cómo le fue: es su código de salida. Por convención, 0 significa éxito y cualquier otro valor indica error, con números distintos para tipos de fallo distintos. Es la forma en que los programas se comunican entre sí cuando no hay una persona mirando la pantalla.

Es esencial en scripts y automatización. Una herramienta de integración continua, por ejemplo, decide si una compilación o unas pruebas han fallado mirando el código de salida. En scripts puedes encadenar comandos con && (ejecuta el siguiente solo si el anterior terminó con 0) o || (solo si falló), y consultar el resultado del último comando con $? en Bash o $LASTEXITCODE en PowerShell. En tus propios programas lo controlas con exit(1) en Python y C, process.exit(1) en Node o devolviendo un valor desde main.

Confusiones frecuentes

Resulta contraintuitivo que 0 signifique éxito, porque en muchos lenguajes 0 equivale a falso. Aquí es al revés: 0 es «todo bien» y distinto de 0 es «algo falló». Otro error típico es creer que un programa que imprime un mensaje de error ha fallado a ojos del sistema: si termina con código 0, para un script o un CI cuenta como éxito. Conviene salir con un código distinto de cero cuando algo va mal. Tampoco hay que confundir el código de salida con lo que el programa imprime: es un canal aparte, un único número.

Preguntas frecuentes

¿Cómo veo el código de salida del último comando?

En Bash o Zsh, con echo $?. En PowerShell, con $LASTEXITCODE para programas externos, y $? para saber si el último cmdlet tuvo éxito.

¿Qué hace `comando1 && comando2`?

Ejecuta comando2 solo si comando1 terminó con código 0. Es útil para no seguir con pasos que dependen de uno que ha fallado.