BASH - Commands - Command Exit Status

When a command is finished running, it returns a status of whether it was successful or not.

An exit status is an integer between 0 and 255 returned when a program exits.

Usually readable by running:

echo $?

NOTE: This is in effect one of the key pieces of the API which shells use to communicate with the programs that they run.

  • 0 signals success.
  • 1 is an error.
  • 2 signals the misuse of a shell built-in.

When a program receives a fatal signal, it will exit with a code of 128 + n where n is the signal code.

For example, for a program sent signal 2 (SIGINT, or more commonly thought of as Ctrl+C):

curl -n https://api.heroku.com/apps
^C
 
echo $?
130

Reserved exit codes

The Advanced Bash-script Guide lists a number of other reserved exit codes.

Some attempt at standardization has also been made in the kernel header sysexits.h:

/usr/include/sysexits.h
#define EX_OK		0	/* successful termination */
 
#define EX__BASE	64	/* base value for error messages */
 
#define EX_USAGE	64	/* command line usage error */
#define EX_DATAERR	65	/* data format error */
#define EX_NOINPUT	66	/* cannot open input */
#define EX_NOUSER	67	/* addressee unknown */
#define EX_NOHOST	68	/* host name unknown */
#define EX_UNAVAILABLE	69	/* service unavailable */
#define EX_SOFTWARE	70	/* internal software error */
#define EX_OSERR	71	/* system error (e.g., can't fork) */
#define EX_OSFILE	72	/* critical OS file missing */
#define EX_CANTCREAT	73	/* can't create (user) output file */
#define EX_IOERR	74	/* input/output error */
#define EX_TEMPFAIL	75	/* temp failure; user is invited to retry */
#define EX_PROTOCOL	76	/* remote error in protocol */
#define EX_NOPERM	77	/* permission denied */
#define EX_CONFIG	78	/* configuration error */
 
#define EX__MAX	78	/* maximum listed value */