meta data for this page
  •  

source

Possible test scenario:

  1. call from another directory by full path /home/user/bin/myscripth.sh
  2. add /home/user/bin to PATH and then call from another directory by myscript.sh
  3. create symlink to script and call using symlink. Check for relative and absolute symlinks.
  4. 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]}'