When I read this answer about $? another question comes to mind.
Is there any best practice for how to use $? in bash?
Let's have a example:
We have a linear script and I we would like to know that all the command was executed ok.
Do you think it is ok to call a small function (let's call it "did_it_work"),
to check the error code and break if it's not.
#!/bin/bash
function did_it_work {
code=$1
if [ "$code" -ne "0" ]
then
echo "Error failure: code $code "
exit 1
fi
}
dir=some/path
mkdir -p $dir
did_it_work $?
cd $dir
did_it_work $?
run_some_command
did_it_work $?
This approach of course means that I have to manually solve the problem if there is any and rerun the script.
Do you think this is a good idea or is there some other best practice to do this?
/Thanks
Best Answer
One common way is:
then you use it like this:
Or if you want it to include the exit status, you could change it to:
and then using it is a bit easier:
When it fails,
mkdir
will likely already have issued an error message, so that second one may be seen as redundant, and you could just do:(or use the first variant of
die
above without argument)Just in case you haven't seen
command1 || command2
before, it runscommand1
, and ifcommand1
fails, it runscommand2
.So you can read it like "make the directory or die".
Your example would look like:
Or you can align the
dies
further on the right so that the main code is more obvious.Or on the following line when the command lines are long:
Also, if you are going to use the name
some/path
multiple times, store it in a variable so you don't have to keep typing it, and can easily change it if you need to. And when passing variable arguments to commands, make sure to use the--
option delimiter so that the argument is not taken as an option if it starts with-
.