I have the following problem, my shell script contain something like:
mydir=''
# config load
source $mydir/config.sh
.... execute various commands
My script is placed in my user dir.. let's say /home/bob/script.sh
If I'm inside the /home/bob
dir and run ./script.sh
everything works fine.
If I'm outside and want to use the absolute path /home/bob/script.sh
the config.sh file is not recalled properly.
What value should i assign to $mydir
in order to make the script runnable from every path without struggle?
mydir=$(which command?)
PS: as bonus please also provide an alternative if the script dir is inside the $PATH
Best Answer
The
$0
variable contains the script's path:As you can see, the output depends on the way it was called, but it always returns the path to the script relative to the way the script was executed. You can, therefore, do:
If the directory is in your
$PATH
, things are even simpler. You can just runsource config.sh
. By default,source
will look for files in directories in$PATH
and will source the first one it finds:If you are sure your
config.sh
is unique or, at least, that it is the first one found in$PATH
, you can source it directly. However, I suggest you don't do this and stick to the first method instead. You never know when anotherconfig.sh
might be in your$PATH
.