Re:With the Rise of DevOps, Perl Shows Its Muscle
by brobinson on Sunday January 08, 2017 @12:50AM
(#13348513)
Ugh. If I have to write Bash, I try to enforce some level of basic sanity with:
I've seen way too many scripts catastrophically fail because of unbound variables or one side of a pipe failing and the script continuing anyways, etc.
[ Parent
| on HN ]
Re:With the Rise of DevOps, Perl Shows Its Muscle
by DCoder on Sunday January 08, 2017 @03:29AM
(#13348898)
I use the verbose version for readability:
set -o errexit
set -o nounset
set -o pipefail
Some commands need custom error handling, which means turning off -e: set +o errexit
ansible-playbook ...
if [[ "$?" != "0" ]]; then
echo -e "\e[1;31m""Error when executing ansible!""\e[0m"
exit 1
fi
set -o errexit
And if you use -e , you will probably need the default value helper to validate input arguments: # the :- operator means "use the right side value if the left side ($1) is not set"
env=${1:-}
inventoryFile="${baseDir}/env/${env}/inventory"
if [[ -f "${inventoryFile}" ]]; then
echo -e "\e[1;31m""Invalid environment specified!""\e[0m"
exit 1
fi
Re:With the Rise of DevOps, Perl Shows Its Muscle
by Ded7xSEoPKYNsDd on Sunday January 08, 2017 @07:20AM
(#13349411)
I feel your first example is better written like this:
if ! ansible-playbook ... ; then
echo -e "\e[1;31m""Error when executing ansible!""\e[0m"
exit 1
fi
But generally when I need to work around errexit, I tend to add something like " || true" or " || xyz_failed=true" to the end of the command line instead of turning it off and on again.
Re:With the Rise of DevOps, Perl Shows Its Muscle
by paulddraper on Sunday January 08, 2017 @01:18AM
(#13348581)
+1 to this.
-e Abort at the first failed line
-u Abort when undefined variable is used
-o pipefail Piped commands return the status of the last failed command, rather than the status of the last command
Re:With the Rise of DevOps, Perl Shows Its Muscle
by iamdave on Sunday January 08, 2017 @01:53AM
(#13348670)
You are a wonderful person for doing this. As an ops guy, I tip my hat.
Re:With the Rise of DevOps, Perl Shows Its Muscle
by user5994461 on Sunday January 08, 2017 @01:15PM
(#13351058)
I'm mostly using ansible instead of bash noawadays.
Does all the same with more commands and better error handling.