BASH Programming

How to Find the Directory Where a Bash Script is Located from within the Script

When working with bash scripts, it’s helpful to know the script location. This can be especially helpful when working with relative file paths, or when trying to execute other scripts or commands from within the script. In this article, we’ll take a look at a few different ways to determine the directory of a bash script from within the script itself.

How to Find the Directory Where a Bash Script Is Located from within the Script

While bash scripting you may require the location of the script to automate various tasks. There are two types of paths in Linux:

  • Relatives Path: Relative is the current working directory.
  • Absolute Path: This is the complete path of the directory and files.

One of the most common ways to determine the location of a bash script is to use the pwd command. The pwd command (print working directory) will show the current directory.

So, in many situations simply using pwd command does not work as it gives only the path of the currently working directory.

For example, if the script is in the Downloads directory and being executed from the Desktop then the output will contain the /home/usr/Desktop not the location of the bash script file that is /home/usr/Downloads.

This tutorial is about getting the path of the directory in which bash script file is located from within the script.

How to Get Directory Path Where Bash Script File Is Located

Another way to determine the directory of a Bash script is to use the dirname command. The dirname command takes a file path as an argument and returns the directory portion of the path.

To use dirname command to determine the directory of a script, you would call the command with the path till the last non-slash components to the script as the argument.

For more details about dirname execute the following commands in the terminal:

$ man dirname

Only dirname will not work, we need another command that is readlink. The readlink command print resolved the symbolic link. Get more information about this command by running:

$ man readlink

Now, create a script:

$ sudo nano myScript.sh

And type:

#!/bin/bash

echo "The bash script path is $(dirname -- "$(readlink -f – "$0")";)";

To run the script use:

$ bash myScript.sh

Let’s change the directory and see what is the output:

Note: In one case the above script will not work if the file is sourced instead of executing as it can be seen in the following output:

The output is /home/sam/Desktop whereas the script file is present in the /home/sam directory.

Conclusion

In conclusion, there are multiple ways to determine the directory of a bash script from within the script itself. The dirname along with readlink utility can be used to determine the directory of a script. However, simply using pwd command does not work as it gives only the currently working directory.

About the author

Kashif

I am an Electrical Engineer. I love to write about electronics. I am passionate about writing and sharing new ideas related to emerging technologies in the field of electronics.