When I need to get path to the script file inside script itself I use something like this:
`dirname $0`
that works file until I call the script through sym link to it. In that case above code prints the location of the link instead the original file.
Is there a way to get the path of the original script file, not the link?
Thanks, Mike
if [ -L $0 ] ; then
DIR=$(dirname $(readlink -f $0)) ;
else
DIR=$(dirname $0) ;
fi ;
You really need to read the following BashFAQ article:
The truth is, the $0
hacks are NOT reliable, and they will fail whenever applications are started with a zeroth argument that is not the application's path. For example, login(1)
will put a -
in front of your application name in $0
, causing breakage, and whenever you invoke an application that's in PATH
$0
won't contain the path to your application but just the filename, which means you can't extract any location information out of it. There are a LOT more ways in which this can fail.
Bottom line: Don't rely on the hack, the truth is you cannot figure out where your script is, so use a configuration option to set the directory of your config files or whatever you need the script's path for.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With