====== source ====== Possible test scenario: - call from another directory by full path ''/home/user/bin/myscripth.sh'' - add ''/home/user/bin'' to PATH and then call from another directory by ''myscript.sh'' - create symlink to script and call using symlink. Check for relative and absolute symlinks. - it should work also if it is sourced ''source'' or ''.'' The best is to create setup/installer script which hardcode path to one shared script. Another solutions: #!/bin/sh MY_DIR=$(dirname $(readlink -f $0)) $MY_DIR/other_script.sh DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) # Works correctly if script is sourced from another one DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cur_file="${BASH_SOURCE[${#BASH_SOURCE[@]} - 1]}" cur_dir="$(dirname "${cur_file}")" ''`BASH_SOURCE' An array variable whose members are the source filenames where the corresponding shell function names in the `FUNCNAME' array variable are defined. The shell function `${FUNCNAME[$i]}' is defined in the file `${BASH_SOURCE[$i]}' and called from `${BASH_SOURCE[$i+1]}' ''