“cd”的目的是什么?命令?

“cd”的目的是什么?命令?

我们知道该cd命令是用来改变目录的。例如

 cd dirname

有效的目录名还包括...。目的cd ..很明确。从联机帮助页:

CDPATH 中的空目录名称与当前目录相同,即“.”。

但这样做的目的是什么呢cd .

答案1

的作用cd .是用有关当前工作目录的信息更新 shell。当当前目录(的路径名)通过其他方式而不是通过cd.

$ pwd
/tmp/shell-bash.OoVntBAM
$ mkdir dir
$ cd dir
$ pwd
/tmp/shell-bash.OoVntBAM/dir

因此,我们当前位于 下的某个位置/tmp,在一个名为 的目录中dir。让我们重命名当前所在的目录。

$ mv ../dir ../new-dir

那么,我们现在在哪里?

$ pwd
/tmp/shell-bash.OoVntBAM/dir

真的吗?为什么,这很奇怪。让我们确保 shell 知道我们是谁。

$ cd .
$ pwd
/tmp/shell-bash.OoVntBAM/new-dir

在脚本中,cd .可以用来测试用户是否仍然可以访问当前目录:

if ! cd . 2>/dev/null; then
    echo lost access to cwd >&2
    exit 1
fi

或者,反过来说,核实在某种撤销当前用户访问权限的操作之后,当前目录将不再可访问。

失去对当前目录的访问权限的原因包括删除该目录,或者某人删除了对该目录的执行权限。


另一个例子是使用cd ., 但带有-P选项 ie cd -P .。如果当前目录是通过符号链接访问的,这会将您置于“物理”目录中:

$ pwd
/tmp/shell-bash.OoVntBAM
$ mkdir dir
$ ln -s dir link-dir
$ ls -l
total 2
drwxr-xr-x  3 kk  wheel  512 May  8 00:48 dir
lrwxr-xr-x  1 kk  wheel    3 May  8 00:46 link-dir -> dir

现在我们有了一个目录,dir以及到该目录的符号链接。我们通过符号链接进入目录:

$ cd link-dir
$ pwd
/tmp/shell-bash.OoVntBAM/link-dir

然后...

$ cd -P .
$ pwd
/tmp/shell-bash.OoVntBAM/dir

答案2

正确的引用cd ..应该是:

‘..’ 的处理方式是将前一个路径名组件移回到斜杠或 DIR 的开头。

并且,是的,cd .不应该更改当前目录,并且,是的,它不会。
但当前目录的名称可能已更改:

$ mkdir thisdir
$ cd thisdir
$ cd .
$ pwd
/home/isaac/thisdir
$ mv ../thisdir ../xxxx
$ cd .
$ pwd
/home/isaac/xxxx

或者当前目录包含符号链接或其物理目录名称已更改。

$ cd ~/ttt
$ pwd
/home/isaac/ttt
$ cd -P .
$ pwd
/home/isaac/me/init/basicdirs.d/ttt

因此,cd .与任何其他一样使用cd DIR,将 更改pwdDIR。它可能看起来是相同的目录,但是,即使是相同的目录,DIR 也可能具有不同的名称或路径。

相关内容