If you are a command line user, there's no doubt that you are familiar with the
cd command. If not, it's just a way to navigate up and down a directory tree in your file system. In addition to using the
cd command, you can also use the builtin directory stack.
How can I use this directory stack you speak of???
It's easy! Let's start by opening up your terminal and viewing the stack with the
As you see, the stack currently contains one directory and in this case
~ which is shorthand for the home directory.
Now instead of
cding to another directory, use
$ pushd alpha
Much like the
pushd changed the directory you are currently in but also pushed the directory onto the directory stack.
Let's push another directory on the stack.
$ pushd ~/beta
~/beta ~/alpha ~
$ pushd ~/gamma
~/gamma ~/beta ~/alpha ~
As you can see, new values are being inserted in front of the list and this the top of the stack. By keeping track of the directories of where you've been, the stack also acts like a bookmark for you to refer back to.
If you prefer to see the stack in a more traditional top down view, use the
-p flag with the
$ dirs -p
I know what you're thinking?
OK, Liz. That's nice but how is that really different than just using the
Well now that you have a record of where you've been, you can pop directories off the stack.
~beta ~/alpha ~
Now you are back in the
beta directory and you can use
popd to navigate all the way back down the stack to your original home directory.
Perhaps you're thinking now, "What if I want to go directory from the
gamma directory to the
Ok, let's back up a minute and push the
gamma directory back onto the stack.
~/gamma ~/beta ~/alpha ~
Every directory on the directory stack also has a index associated with it. You can view it but using the
$ dirs -v
You can also directly access the directory name using
For example, to access what is in the
2 index of the directory stack, execute:
$ dirs +2
This will echo the directory name but not navigate there. You can pop directories by index like this:
$ popd +2
This will remove the
alpha directory from the stack as well as change your current working directory.
Unfortunately, if you are on Mac or Windows and using something like Git Bash, this appears to be broken. In this case, we can use our old pal,
$ cd $(dirs -l +2)
popd, and the
dirs commands are great additions to your toolbox. I find them especially useful if the paths are long with deeply nested sub-directories. If you find yourself always
cding to the same paths, give these commands a try.
(open source and trusted by devs everywhere ❤️)