====== 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 [[http://tldp.org/LDP/abs/html/exitcodes.html|reserved exit codes]].
Some attempt at standardization has also been made in the kernel header 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 */