389

Is there a way to go back to previous directory we were in using bash,tcsh without using pushd/popd ? I'd like to type something like "back" and got returned to the previous directory I was in.

Edit:

"cd -" works, but only for current and previous directories. Is there anyway I can go back to the previous previous previous directory like how you can go back in the web browser?

Regards

5
  • 1
    As noted below, you can do so using "pushd" and "popd".
    – blueyed
    Mar 5, 2010 at 3:02
  • 8
    Just a side note "cd --" goes to the user default direcotry (/home/username) Apr 8, 2012 at 22:49
  • 1
    Best answer imho : unix.stackexchange.com/a/180640/158177 provides cd -1 to cd -9 which I think is what the OP asked for
    – Titou
    Sep 29, 2016 at 15:11
  • 1
    @sdaffa23fdsf cd -- is equivalent to cd. No need to type the -- unless you want to separate a list of paths from a list of options to avoid ambiguity. In your case, there's no such list, so the -- is redundant. cd on its own changes to the home directory. Apr 25, 2022 at 1:44
  • Use cd ../../..
    – QMaster
    Nov 8, 2023 at 23:10

4 Answers 4

526

cd - (goes back to previous directory)

If you want to be able to go to the other previous directories, this is not possible out of the box. But check this script and instructions:

History of visited directories in BASH

The cd command works as usual. The new feature is the history of the last 10 directories and the cd command expanded to display and access it. cd -- (or simply pressing ctrl+w) shows the history. In front of every directory name you see a number. cd -num with the number you want jumps to the corresponding directory from the history.

6
  • 31
    also pushd and popd might be useful
    – lorenzog
    Feb 25, 2010 at 8:55
  • 8
    @lorenzog : lydonchandra, in his question, said "without using pushd/popd"
    – Snark
    Feb 25, 2010 at 9:19
  • @ogc-nick for using this cd -- in menu-like manner, you should use the mentioned script
    – RamValli
    Feb 11, 2016 at 6:13
  • 1
    @ogc-nick no it doesn't. The -- simply separates a command and its options from the parameters (see this post). Because no arguments follow after --, the final command is just cd which switches to your home directory. That might have been the second previous directory, but that's just a coincidence.
    – Gerrit-K
    Mar 8, 2018 at 9:02
  • wow syntactic sugar much
    – oldboy
    Jun 24, 2018 at 2:00
36

You can also use variable cd $OLDPWD. This can be also used in shell scripts.

3
  • 8
    $OLDPWD maintains the last directory you came from which is good for scripts. I use $OLDPWD with cp command a lot. E.g cp -v $OLDPWD/file . Jan 9, 2015 at 9:12
  • 1
    It is worth pointing out that using cd $OLDPWD does not print anything to standard output, while cd - seems to usually do. This is a better solution for most scripts. Mar 6, 2020 at 21:10
  • I dont think so!!! The cd - comes handy when you work in interactive shell so you do not have to write long commands and have feedback where you are. But for scripts you should definitelly use $OLDPWD as scripts usually do not want cd to print anything to stdout! Also the value of $OLDPWD does not need to be used just for going back. You can for example use it with ls or compare to $HOME or other directory. The POSIX says that cd - shall be equivalent of cd "$OLDPWD" && pwd. Mar 9, 2020 at 13:31
2

I find the easiest way to do it is with this .bashrc power edit: https://github.com/wting/autojump . You get to "mark" folders you navigate to, giving them a shorthand name that's easy to remember (my advice; the foregoing is not in the docs), such as Pics for Pictures, etc. 'jump' returns you to the folder you 'marked,' and 'marks' lists folders you have added to the 'stack' (as with pushd and popd), with the added advantage that your marks remain the same from one session to the next, ad infinitum.

I have yet to try it on more than one harddrive, but the results should be similar to those using a single volume.

S Wright

1
  • thanks for this alternative solution. I am gonna try this autojump tool. Jun 17, 2020 at 15:15
0

I think cd .. might help. If you do a ls -a in any directory you would see that there are two entries: one named "." and another named ".."; the single dot is reference to the directory you are already in, while the double is the previous directory in the path.

2
  • 31
    .. is not the previous directory, it's just the parent directory. Dec 10, 2012 at 10:28
  • 7
    This answer provides useful information even if it does not answer correctly the question. Therefore there is no point in piling negative votes on it, I upvoted for the effort.
    – Titou
    Sep 29, 2016 at 12:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .