Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

In terminal, how can I define a key to go to the previous directory which I was in when changing directory with the cd command?

For example, I'm in /opt/soft/bin and I cd into /etc/squid3 and I want to get back to the first directory.

share|improve this question
up vote 106 down vote accepted

You can use

cd -

or you could use

cd $OLDPWD
share|improve this answer
1  
Any idea why the directory name is printed to the console when using "cd -" ? – dtmland Aug 31 '15 at 23:56
3  
Probably since the old shells didn't display the name of the current directory in the prompt, it was helpful to see the name of the directory when you typed cd -. For example when you type cd /usr/local you know that you are in /usr/loal, but when you type cd - you don't always remember from which directory you came from. So it saves you from typing cd -; pwd. But this is all speculation. – Raphael Ahrens Sep 1 '15 at 4:37
2  
Or you can use aliasing: Set up alias as alias -- -='cd -' then use - (1 char) instead of cd - (4 char). Faster :D – ADTC Feb 16 at 4:38
    
I used a simple technique instead. Just added a new line character after "cd -" so now cd -\n takes me directly to the next directory – Rajkiran Mar 10 at 11:28
    
@ADTC : I added "Command + Left" key combination to go backwards in my iTerm Global Key Shortcuts. Faster and more related. – Rajkiran Mar 10 at 11:32

The other answers are definitely complete in the direct answer sense. cd - and cd $OLDPWD are definitely the main choices for this. However, I often find that getting into a workflow with pushd and popd works better.

Long story short, if you are moving into a directory with the ultimate intent of coming back to where you started, use pushd/popd.

Extended example

The major difference is easily shown by an example.

$ cd dir1
$ pushd dir2

At this point, you have a directory stack that is dir2, dir1. Running pushd with no arguments will put you back in dir1 with the stack now as dir1, dir2. popd would do the same, but would leave you with an empty directory stack. This is not much different than how you would have been with the cd - workflow.

However, now you can now change directories multiple times and get back to dir1. For example,

$ cd dir1
$ pushd dir2
$ cd dir3

If you run popd at this point, you will go back to dir1.

share|improve this answer
2  
You can also stack directories, so repeatedly use pushd and go back to previous folder while popd-ing. – Bernhard Jun 30 '13 at 19:08
1  
Certainly. I almost put a large example that included checking the stack with dirs -v, but the reality for me is that often the simple case is all I really use. (Or, worse, I make a mistake when trying push +2 or similar) Also, I thought baby steps for getting someone to try the workflow. :) – Josh Berry Jul 1 '13 at 2:53
$ cd - 

will change to the previous working directory.

share|improve this answer

You should use:

cd ~-

it does the same as cd - (from the currently accepted answer) without the annoying echo of the directory and is easier to type than cd "$OLDPWD" or cd - > /dev/null.

share|improve this answer
    
Redirecting the echo to null file ! It's genius !! – Ram Feb 11 at 6:19
    
The echo shows the new directory not the previous one. And I would find it useful, so that I know where I am now, especially if I'm in a shell that only shows the current directory name (or nothing at all) on the prompt, and I'm too unbothered to change the prompt to show the full path. Of course, if your prompt already shows the full path, the echo would be redundant and annoying. In that case, I think you can try doing alias -- -='cd "$OLDPWD"' then using - (1 char) instead of cd ~- (5 char). :) – ADTC Feb 16 at 4:37

You can "define a key" for 'cd -' by editing your '~/.bashrc' file and including an alias for the command. For example you could add 'cdc' to make it 'cd -' which would provide you with a shorter way to get to the last directory by adding:

alias cdc='cd -'

This way you would simply type 'cdc' and it would put you in your last working directory.

share|improve this answer
5  
And confuse you to no end when you use a system where that alias isn't in place. It saves typing one character every once in a while. Why even bother? – Michael Kjörling Jul 1 '13 at 14:16
1  
"In terminal, how can I define a key to go to the previous directory" I never get confused. Its just a shortcut, when you are on another system just use the long-hand way. – Atari911 Jul 1 '13 at 19:25
    
@Atari911 great question! here's the answer: stackoverflow.com/questions/4200800 Here's what I did (bound F12): bind '"\e[24~":"\C-k \C-ucd -\n"' (or more preferably move it to inputrc file as mentioned in the answer). – ADTC Feb 16 at 5:00

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.