linux,

How to check if command succeeded in Linux

Aug 29, 2021 · 2 mins read · Post a comment

As a DevOps engineer, or any other Operation roles, we sometimes need to check if a Linux command succeeded. There are many reasons, for example: our internet connection failed, a VPN connection hangs on the remote server while we were running some commands, maybe backing up some MySQL DBs (don’t do manual backups!), or we just want to pass the command exit status as a conditional in an automation script, et al. You get my point. Let’s see how can we check the status of a command while we were kicked out of the server.

Prerequisites

  • Linux bash environment

Solution

Step 1. Connect to the remote server, and let’s update some package information first.

apt update -y

Step 2. Once the command run, execute the following command to check if it was successful.

echo $?

Expected output:

root@devcoops:~# echo $?
0

Notice the output value is 0. The integer 0 exit status means that the command was successful without any errors.

Step 3. But, what if we interrupt the apt update -y while it’s running. Run apt update -y again and interrupt it, by pressing Ctrl + C.

root@devcoops:~# apt update -y
0% [Working]^C

root@devcoops:~# echo $?
130

As you can see the output value is 130. This is obviously an error status code. Why 130 though? Well, if a process is killed by signal n, the value is n + 128. SIGINT or Signal Interrupt as the name suggests, will interrupt any given process, and because it’s numbered as a signal 2 on most Unix variants, thus $? is 128 + 2 = 130.

Conclusion

As always, use it as a conditional in a bash script, or even better, as part of an Ansible playbook. Feel free to leave a comment below and if you find this tutorial useful, follow our official channel on Telegram.