Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

bash: exit from source-d script

Tags:

bash

My bash script uses a lot of checks like:

if [ something bad ] ; then
    echo "error message"
    exit 1
fi

I have found out that if the user executes it via source my-script.sh rather than ./my-script.sh, this exit 1 closes the user's shell ! And the user sees no error message !

How do I know that the script is source-d, and how do I exit (with non-zero status code) the source-d script? In general, what can I do about this?

like image 330
18446744073709551615 Avatar asked Apr 16 '18 12:04

18446744073709551615


1 Answers

It seems there could be 2 parts to this. The first is to know when you're executing in a sourced script instead of an executed one. That can be found in this answer, and for bash they suggest:

[[ "$0" != "$BASH_SOURCE" ]] && sourced=1 || sourced=0

to tell whether or not you are being sourced.

If you are being sourced, you'd want to use return instead of exit.

You could store that function in a variable with something like

if [[ $sourced -eq 1 ]]; then
    ret=return
else
    ret=exit
fi

and then when you want to use the appropriate one you'd just use

$ret 1
like image 109
Eric Renouf Avatar answered Sep 29 '22 07:09

Eric Renouf