Reputation: 1405
I have some script, that uses files in directories around it. It uses
dirname $0
command. It should work from any directory where I run this script, but when I run a symbolic link that points to that script I get the path of symbolic link. So I get the output of dirname rather than the path of the script itself.
Any one know a way to get the path of where the script is run?
Upvotes: 4
Views: 7422
Reputation: 8338
A simpler solution:
dirname $(readlink -f $0)
Tested with on Ubuntu 14.04:
which java
returns /usr/bin/java
, which is a symbolic link.
readlink -f `which java`
Returns /usr/lib/jvm/java-8-oracle/jre/bin/java
Finally,
dirname $(readlink -f `which java`)
Returns /usr/lib/jvm/java-8-oracle/jre/bin
, which is the folder under which "java" is located.
Upvotes: 1
Reputation: 1790
Unless I misunderstand you, the problem should be the same as the one in: How do you normalize a file path in Bash?
An option not mentioned there is the following python one-liner:
python2.6 -c "import os,sys; print os.path.realpath(sys.argv[1])" "$0"
Finally, remember to use double quotes around "$0".
Upvotes: 0
Reputation: 5479
Get the real path to your script
if [ -L $0 ] ; then
ME=$(readlink $0)
else
ME=$0
fi
DIR=$(dirname $ME)
Upvotes: 4