====== 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 */