Contents

什么是CD~?

1. 概述

通常,我们可能会使用cd 命令来更改当前工作目录。但是,让我们考虑一下我们在终端中运行一些命令的情况,然后我们想导航到我们所在的上一个目录。

可能是我们记不起之前的路径,也可能是知道路径,但是又想快点回去。在本教程中,我们将了解如何使用 – 作为cd的参数来完成此操作。

2. *cd -*的含义

作为不同命令的参数的单个破折号可能具有不同的含义。例如,在像paste 这样的命令中使用破折号可能会导致读取标准输入。但是,使用破折号作为cd的参数会将当前目录更改为先前的工作目录

假设我们在*/home/pi*目录:

$ pwd
/home/pi

让我们将当前目录更改为*/home*:

$ cd /home

现在,让我们使用*cd –*看看它做了什么:

$ cd -
/home/pi

当我们使用单个破折号作为cd命令的参数时,它包含先前工作目录 ( OLDPWD )的路径。因此,我们可以快速回到原来的位置 ( /home/pi )。 请注意,我们可以随时打印OLDPWD的值:

$ echo "$OLDPWD"
/home

OLDPWD变量由cd设置。现在,让我们使用cd几次:

$ cd /
$ cd /etc
$ cd /var
$ cd lib

如果我们使用pwd 命令,我们可以看到我们在*/var/lib目录中。因此,OLDPWD值将是/var*。现在让我们使用*cd –*几次并查看输出:

$ cd -
/var
$ cd -
/var/lib
$ cd -
/var
$ cd -
/var/lib

我们可以看到,无论我们使用多少次cd –,都不可能回到第一和第二目录(/etc 和 / 目录),因为OLDPWD只是一个变量,而不是一个堆栈。因此,它在任何给定时间只包含一个值。因此,我们只是在最后两个目录之间切换。要拥有之前目录的堆栈,我们可以考虑使用*pushd * 和*popd 命令。 请注意,如果我们在系统启动后立即使用cd* ,我们将收到错误消息:

$ cd -
-bash: cd: OLDPWD not set

那是因为OLDPWD还没有设置。另请注意,如果进程成功,此命令将返回退出状态0,如果进程不成功,则返回1

$ cd -; echo $?
-bash: cd: OLDPWD not set
1

我们可以使用*$?* 这是 Linux 中的一个特殊参数,包含最近在前台执行的命令的退出状态。

3. 相当于cd – 的命令

请注意,在前面的示例中,我们可能会看到*cd –*命令除了更改目录外,还会打印当前工作目录。因此,我们可以说它等同于命令:

$ cd "$OLDPWD" && pwd

我们将cd的功能分成两部分:

  • 将目录更改为OLDPWD
  • 打印当前工作目录

由于cd命令不打印当前工作目录,将目录更改为OLDPWD后,我们使用pwd命令也打印当前工作目录。 当然,如果我们不想*cd –*打印当前工作目录,我们可以使用:

$ cd "$OLDPWD"