Linux – How to check the exit status of several piped commands

As piping in bash commands is common and very usefull, controling the exit status of each piped commands in bash scripting can be vital, especially for backups.

I was checking by a customer the backups of a critical MySQL instance and was surprised even stunned that the return status of all of them was always  successfull when tested but physically on disk, the dumps were all empty.
No valid backups since a long time meaning no possible recovery.
Oups! How can it be?
I immediately opened the backup script with “vi” and had a look to the used statement which was the following:
1
mysqldump -u $USERNAME -p $PASS $DBNAME | bzip2 -9c -c > Dump.sql.gz
Now, what if the backup failed and the bzip2 command succeeded?
In fact, the exit status will be the one of the last command.
1
2
echo $?
0

And this will be always successfull.

So, the  solution to check the exit status of a particular command in piped commands is to use an inbuilt linux variable called  PIPESTATUS.
PIPESTATUS is an array variable which contain the exit status of every piped commands.
In our case,
echo ${PIPESTATUS[0]} will refer to the backup  and will be greater than 0 if it fails
echo ${PIPESTATUS[1]} will refer to the compression
echo ${PIPESTATUS[*]} or echo ${PIPESTATUS[@]} will give you the status of both.
So, one solution in our example could be:
1
2
3
4
5
6
7
8
mysqldump -u $USERNAME -p $PASS $DBNAME | bzip2 -9c -c > Dump.sql.gz
 
if [ ${PIPESTATUS[0]} -ne "0" ]
then
    echo "the MySQL Database backup failed with Error: ${PIPESTATUS[0]}";
else
    echo "The MySQL Database backup was successfull!";
fi
0 (0)
Article Rating (No Votes)
Rate this article
Attachments
There are no attachments for this article.
Comments
There are no comments for this article. Be the first to post a comment.
Full Name
Email Address
Security Code Security Code
Related Articles RSS Feed
CentOS / RHEL 7 : Configuring an NFS server and NFS client Linux NFS
Viewed 17956 times since Fri, Feb 21, 2020
12 Linux Rsync Options in Linux Explained
Viewed 12941 times since Wed, Oct 31, 2018
debian How to check Debian CVE status using python script
Viewed 4361 times since Sun, Sep 23, 2018
RHEL7 slow ssh login
Viewed 5184 times since Tue, Aug 6, 2019
20 Linux Command Tips and Tricks That Will Save You A Lot of Time linux
Viewed 5709 times since Thu, Apr 18, 2019
Używanie rsync poprzez Secure Shell
Viewed 41986 times since Thu, May 24, 2018
OpenSSL – sprawdzanie czy klucz pasuje do certyfikatu
Viewed 3327 times since Thu, May 24, 2018
How to Install and use Lsyncd on CentOS 7 / RHEL 7 rsync
Viewed 5349 times since Wed, Oct 31, 2018
Linux get the list of FC HBA’s and WWPN
Viewed 4400 times since Tue, May 22, 2018
Extending Linux LVM partitions script
Viewed 7145 times since Wed, Feb 6, 2019