How to expand relative paths in shell script

Change Directory in Subshell

There’s a little trick you can use to get the absolute path from a relative path without changing the present working directory. The trick is to move to the relative path in a subshell, and then expand the working directory. For example:

export SRC_DIR=$(cd ..; pwd)

Relative Paths from Script Instead of Invocation Directory

To change to a relative path from a script’s location, rather than the current working directory, you can use a parameter expansion or the dirname utility. I prefer dirname, since it’s a little more explicit. Here are both examples.

# Using /usr/bin/dirname.
export SRC_DIR=$(cd "$(dirname "$0")/.."; pwd)

# Using the "remove matching suffix pattern" parameter expansion.
export SRC_DIR=$(cd "${0%/*}/.."; pwd)

Leave a Comment