You know when you’re in a very “deep” directory, such as
/usr/local/src/this/that/thatother, and you type “cd” and press enter by mistake ((happens a lot when you think there’s only one directory where you are, so you type
"cd <tab><enter>“, but there was in fact more than one, and the tab key didn’t add anything)) and go back to your home directory, and would love to go back to where you were before, without having to type all the path again (or copy and paste it, or do a CTRL-R back search)?
Just type “
cd -” (that’s a single dash, or “minus” sign). Believe it or not, I didn’t know that until today, and I’ve used Linux since 1994 or so. Slightly embarrassing, I know. 🙂
If you enter the command a second time, you will return to where you were before typing the first “
cd -“. In other words, the command can be used to toggle between the previous directory and the current one.
It’s also not just a bash thing; I’ve tried it on FreeBSD’s sh and OpenBSD’s default ksh, and it works there as well.
(Found here, after someone asked me and I didn’t know the answer.)
P.S: – Welcome to the first technical post on Winterdrake. (Hey, it’s geeky stuff, too!)
24 thoughts on “Unix/Linux trick: ‘cd’ back to the previous directory”
I do this all the time, and likewise have used linux for a number of years but I never thought it this was possible because I had never asked my self. I would just do it the long way and go back into my deep directory. Thank you.
cool! Thanks a lot.
Works from git shell on Windows 7
You also have pushd and popd to push and pop the directory you’re in on the stack, it gives you even more flexibility
Very nice! Thank you very much!
Very helpful, thank you!
I didn’t know until today.
It is not just the previous dir and the other.
Use ‘pushd’ with a directory argument. It will push the current dir and the argument to a ‘stack’:
/home/user/work > pushd /home/user/work/this/that/whatever
Now you can go back and forth between those 2 using ‘cd -‘.
Was wrong here. It does that but because ‘pushd’ changes dir to the argument specified.
I liked this trick, very useful, thanks a lot. 🙂
Also usually available in OLDPWD in the environment, according to SUSv4, cd – is equvalent to
cd “$OLDPWD” && pwd
My favorite trick to complement this is an alias, specifically ‘-‘ as an alias. Bash and Zsh, not sure about other shells:
alias — -=’cd -‘
Now all you have to do is type ‘-‘ and you’re back at the previous directory. Very quick and handy!
I’ve always used $OLDPWD but rarely bother with it as I’ll just open another putty window if I really don’t want to leave the current directory. But yeah, I didn’t know this one either.
FreeBSD’s man page for bash:
An argument of – is converted to $OLDPWD before the directory change is attempted.
Kind of like when I realized hitting “0” took me to the beginning of the line in vi. I never used “^” again.
You can also use ~- as a variable referring to $OLDPWD, so you can do somehting like “cp ~-/foo .” to copy the file named foo from the previous current directory into the current directory.
I feel iam gonna blow up uyour thread with saying ‘cd ..’ is back one dir. And I use linux’s crap on stupid android a day or so…
Is there any equivalent parameter for “CD” in MS-DOS?
That’s not the same and wouldn’t make sense for the author to mention the “I’m in dir /x/y/z/a and made a cd by mistake)
cd .. after this would just go to “/home” assuming you’re now in “/home/user” (aka ~)
cd – goes back IN HISTORY if you want a better explanation….
So when you type “cd /a/b/c” and then “cd /x/y/z”: “cd -” will go back to “/a/b/c” while cd .. would just got to “/x/y/”
I go to admit I don’t remember to use it as often as I should, mostly because I use freebsd more and “csh/tsh” go back in the history of a command when you do “command – Arrow UP” which is many times helpfully but not always.
Anyway this is old but the comment might confuse other users so I though I should explain that is not the same thing at all!
“I go to admit” should read “I have to admit”*
Also that reply was to @balalayka ofc
@Carlos AFAIK no, that’s not possible with DOS “cd”!
Thanks so much man
Nice tip, thank you very much — I find myself cd-ing and then “oops forgot one more thing” all the time!
“cd ~-” will perform the cd without echoing the direcotry to the screen. Useful when using in scripts.
in zsh you can
and it will cd to the fifth last directory. And
will show a list of the last directories and I can pick one. Bash does not seem to support “cd -” (maybe it has a different syntax).
I meant “cd -” and invoke completion with tab key.
In Ubuntu 18.04, I added these aliases to my ~/.bashrc file:
alias u=’cd ../’
alias t=’cd /’
alias h=’cd ~’
alias b=’cd -‘
Works a treat 🙂