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
Using grep to find string in files
Viewed 2322 times since Fri, May 15, 2020
How to Analyze or Read OS Watcher Output in three easy steps -- With Example ?
Viewed 41902 times since Thu, Jun 21, 2018
How to enable automatic security updates on CentOS 7 with yum-cron
Viewed 2539 times since Fri, Oct 26, 2018
Linux - Cannot login from remote console but can access via ssh
Viewed 5304 times since Fri, Jun 8, 2018
Split and Reassemble files
Viewed 3567 times since Mon, May 28, 2018
Linux LVM recovery
Viewed 17863 times since Wed, Jan 23, 2019
Need to set up yum repository for locally-mounted DVD on Red Hat Enterprise Linux 7
Viewed 3236 times since Mon, Oct 29, 2018
RHCS6: Quorum disk and heuristics
Viewed 4296 times since Sun, Jun 3, 2018
Linux 16 Useful Bandwidth Monitoring Tools to Analyze Network Usage in Linux
Viewed 15528 times since Mon, Sep 21, 2020
How to encrypt a partition with DM-Crypt LUKS on Linux
Viewed 8294 times since Fri, Jul 13, 2018