Is it possible, executing a file symlinked in /usr/local/bin folder, to get the absolute path of original script? Well, .. I know where original file is, and I know it because I am linkging it. But, ... I want this script working, even if I move original source code (and symlink).
#!/bin/bash
echo "my path is ..."
readlink
is not a standard command, but it's common on Linux and BSD, including OS X, and it's the most straightforward answer to your question. BSD and GNU readlink implementations are different, so read the documentation for the one you have.
If readlink
is not available, or you need to write a cross-platform script that isn't bound to a specific implementation:
If the symlink is also a directory, then
cd -P "$symlinkdir"
will get you into the dereferenced directory, so
echo "I am in $(cd -P "$symlinkdir" && pwd)"
will echo the fully dereferenced directory. That said, cd -P
dereferences the entire path, so if you have more than one symlink in the same path you can have unexpected results.
If the symlink is to a file, not a directory, you may not need to dereference the link. Most commands follow symlinks harmlessly. If you simply want to check if a file is a link, use test -L
.