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

wan*_*r95 3 bash cd-command

我们知道该cd命令用于更改目录。例如

 cd dirname
Run Code Online (Sandbox Code Playgroud)

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

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

但是,这样做的目的是cd .什么?

Kus*_*nda 6

的作用cd .是使用有关当前工作目录的信息更新外壳程序。在当前目录(的路径名)通过其他方式更改而不是通过的情况下,这可能很有用cd。

$ pwd
/tmp/shell-bash.OoVntBAM
$ mkdir dir
$ cd dir
$ pwd
/tmp/shell-bash.OoVntBAM/dir
Run Code Online (Sandbox Code Playgroud)

所以,我们目前在 下的某个地方/tmp,在一个名为dir. 让我们重命名我们当前所在的目录。

$ mv ../dir ../new-dir
Run Code Online (Sandbox Code Playgroud)

那么,我们现在在哪里?

$ pwd
/tmp/shell-bash.OoVntBAM/dir
Run Code Online (Sandbox Code Playgroud)

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

$ cd .
$ pwd
/tmp/shell-bash.OoVntBAM/new-dir
Run Code Online (Sandbox Code Playgroud)

在脚本中,cd .可能用于测试用户是否仍作为对当前目录的访问权限:

if ! cd . 2>/dev/null; then
    echo lost access to cwd >&2
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

或者,反过来,验证当前目录在某种操作后不再可访问以撤销当前用户的访问权限。

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


另一个例子是使用cd ., 但带有-P选项,即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
Run Code Online (Sandbox Code Playgroud)

所以现在我们有一个目录 ,dir和一个指向该目录的符号链接。让我们通过符号链接进入目录:

$ cd link-dir
$ pwd
/tmp/shell-bash.OoVntBAM/link-dir
Run Code Online (Sandbox Code Playgroud)

然后...

$ cd -P .
$ pwd
/tmp/shell-bash.OoVntBAM/dir
Run Code Online (Sandbox Code Playgroud)