如何在Bash中快速返回到先前的工作目录?

51

使用 cd 命令进入一个目录后,如果没有记住之前的工作目录,就无法快速返回。是否有一种方便的方法可以快速返回之前的工作目录?

示例:

$ cd ~/some_path
$ cd /another_path
$ command_to_go_back_to_some_path
7个回答

120

你可以通过cd -返回上一级目录。


1
另外,你可以使用 dirspopdpushd 维护一个目录栈。更多信息请查看此处:http://www.talug.org/events/20030813/cmdline_tips_n_tricks_aug03.html - Darragh Enright

45

你也可以这样做

$ pushd ~/some_path
$ pushd /another_path
$ popd 
$ popd

26

如前所述,您可以使用cd -。Shell 内部执行cd $OLDPWD命令。


如果是这样,为什么手动更改变量OLDPWD不会改变“cd -”命令的行为呢? - Nehal J Wani
@NehalJ.Wani 很有趣的问题。你使用的是什么操作系统?我在OSX上尝试了一下,它对我有效。 - Darragh Enright
1
@Darragh 在bash中,cd $OLDPWD可以工作,但在zsh中却不行。:'( - Nehal J Wani
啊...好的。有趣!真糟糕。谢谢你澄清 :) - Darragh Enright

6

如果要在脚本中使用,您可以使用OLDPWD shell变量:它包含上一个工作目录。

$ pwd
/home/username
$ cd /usr/bin
$ pwd
/usr/bin
$ cd "$OLDPWD"
$ pwd
/home/username

在脚本中,我更喜欢使用这种方法而不是cd -,因为我不必抑制任何输出。


在脚本中,对于每个目录,通常最好使用子shell:(cd /usr/bin && pwd)等等。 - undefined

6

如果您想在脚本中使用它并抑制输出,请按以下方式操作:

cd - > /dev/null

1
Bash有一个快捷方式~-,它会扩展为上一个工作目录,就像~+扩展为当前工作目录一样。
cd ~-

虽然这比输入cd -要多打几个字,但这个知识在其他情境中也很有用(例如,使用mv foo bar baz ~-重命名文件)。

1
由于它扩展到$OLDPWD,它也不会生成任何输出,因此既简短又没有cd -可能不需要的输出。 - undefined

0
是的,在终端中使用cd后,有几种方便的方法可以快速返回到之前的目录:
cd -命令将带您返回到上次所在的目录。您可以将其视为在当前目录和上一个目录之间切换的快捷方式。 pushd和popd pushd允许您将目录推入堆栈中,当您进入它们时,而popd则将它们弹出。 例如:
~ $ pwd
/home/user

~ $ cd folder1
/home/user/folder1 $ pushd folder2
/home/user/folder1/folder2 ~ $ pwd 
/home/user/folder1/folder2

~ $ popd
/home/user/folder1 $ pwd
/home/user/folder1

2
这两个问题已经被现有的答案覆盖了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接