bash - set -e makes function stop running early? -
i have function seems break when turn on errors set -e. suspect working intended can't see i'm doing wrong.
here function:
#!/usr/bin/env bash set -e my_function() { base_dir="/tmp/test" if [ ! -d $base_dir ]; echo "creating $base_dir" mkdir -p $base_dir touch $base_dir/some-file.txt fi is_edited=$(grep "foo" $base_dir/some-file.txt) if [ ! -z $is_edited ]; cd $base_dir echo "doing stuff" docker run --rm debian ls fi echo echo "done" echo } my_function with set -e flipped on, function returns seemingly without hit echo statements. set -e turned off, echo statements hit. happening , how fix this?
try using:
is_edited=$(grep "foo" $base_dir/some-file.txt || test $? -eq 1) the exit status of grep 0 if found match, 1 if didn't find match, , 2 if got actual error. if there's no match foo in file, considered error, , set -e terminate script. above code translates 1 success, script terminate if grep gets real error.
if don't care terminating script if grep gets error, use
if grep -1 "foo" $base_dir/some-file.txt ; ... fi the -q option makes not print matching line, set exit status based on whether found match.
Comments
Post a Comment