如何在 Linux shell 中返回上次使用的目录?

如何在 Linux shell 中返回上次使用的目录?

如何返回到 Linux shell 上使用的最后一个目录?

例如:我打开一个新的 shell(或者在不同的控制台 shell 中登录)然后写入:

root@vignesh : cd /root/Desktop 

这将引导我进入/root/Desktop目录(如果我有权访问它)

root@vignesh:~/Desktop# 

我现在如何才能返回上一个目录?
是否有任何命令可以返回我上次使用的目录?
我是否需要再次使用该cd命令才能返回上一个目录?

答案1

cd -

cd -将带您进入以前使用的目录(如果有的话)否则将产生错误。

如果一个先前使用的目录存在的话,它会在那里进行更改,更新当前工作目录和前一个工作目录的值,返回成功退出状态 ( 0)。
否则,它会打印一条错误消息,并返回退出状态 ( 1)。
使用 进行自己的检查cd -; echo $?

当你在脚本中使用退出状态时,退出状态将变得很重要
非 0 的退出状态可能会停止整个脚本的执行(如果有set -e),或者最糟糕的是,可能导致命令的退出点cd -与您编写脚本时所想的退出点不同,并在错误的目录中执行命令:想象一下您从 dir0 开始;在更改为 dir1 之后,您无法更改为 dir2。现在您执行cd -。您认为是在 dir1 中,但实际上您在 dir0 中……从这里开始,一切都掌握在命运的手中。


cd $OLDPWD(或者cd $owd

cd是所有 shell 的内部命令(从 开始的所有 shell sh)。
在 和 下dashbash它将设置变量PWDOLDPWD用于当前和旧的工作目录。在 和 下cshtcsh它将改为设置cwdowd

cd $OLDPWD因此使用命令狂欢cd $owdtcsh您将被带到旧的工作目录(如果存在),或者您的主目录如果未设置此变量。
退出代码将始终为0,如果您有权访问您的主目录(1)


newdir ... popd

pushd将目录添加到堆栈并popd从堆栈中删除一个目录。一个优点cd -是您可以选择什么时候返回到已签名的目录,而您不必被迫返回到最后一个目录。另一个优点是,您可以堆叠多个目录并决定跳转到哪个目录。有关这些目录的help pushd信息help popd内置命令


笔记:

  1. 写作cd $NotAlreadySetVariable相当于没有任何参数的写作cd,它将带你到达你的主目录。准确地说,它将带您进入$HOME(对于 bash、dash...)或$home(对于 csh、tcsh...)内的目录。如果此目录不存在或无法访问,您将收到错误。如果$HOME(或$home)为空,您将保留在当前目录中,不会生成任何错误,并且$OLDPWD(或$owd)值将设置为当前目录。

  2. $OLDPWD当您想使用前一个目录作为命令的参数时,变量$owd会很有用。例如,您想将当前目录中的所有文件移动到旧目录中:mv * $OLDPWD


琐碎的
需要注意的是man bash,在 PWD 的定义中使用当前工作目录 (cwd) 而不是当前工作目录 (PWD) 之类的东西......

PWD       The logical value of the current working directory.
          This is set by the cd command.

OLDPWD    The previous logical value of the current working directory.  
          This is set by the cd command.

HOME      The  home  directory of the current user; the default argument for  
          the cd builtin command. The value of this variable is also used when   
          performing tilde expansion.

man tcsh

光盘将“-”解释为旧工作目录(相当于 shell 变量 owd)。这根本不是替换,而只是那些命令识别的缩写。尽管如此,它也可以通过引用来防止。

答案2

我想出了使用cd命令

cd - 

将重定向回上次使用的目录

答案3

用于pushd dir更改目录 用于popd更改目录回来 用于dirs查看目录堆栈 用于pushd切换当前目录与上一个目录

相关内容