无论我在哪个目录,如何使用 CDPATH cd 到 Documents?

无论我在哪个目录,如何使用 CDPATH cd 到 Documents?

如果 shell 内置命令 cd 在当前目录中没有找到目标目录,它会参考 CDPATH。如果目标目录是绝对目录(以根目录 / 开头),则不使用 CDPATH。

CDPATH 是一个以冒号分隔的目录列表,例如

CDPATH="/home/walt/first:/usr/local/bin:/home/walt"

然后我就可以了cd Documents,不管我当前的目录是什么。

不管我当前的目录是什么,我该怎么做cd Documents?我尝试在非当前目录中使用 cd Documents,但出现了错误消息。

如果 cd shell 内置命令在当前目录中没有看到目标目录,它会查阅 CDPATH

它如何查阅 CDPATH?如果 cd shell 内置命令在当前目录中没有看到目标目录,则会给出错误。

我只是说,如果我从主目录以外的任何其他目录进入照片文件夹,它都会出现错误消息,对吗?

答案1

我们来看一个例子:

设置

root@daniel-tablet1:~# adduser walt
info: Adding user `walt' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `walt' (1004) ...
info: Adding new user `walt' (1004) with group `walt (1004)' ...
info: Creating home directory `/home/walt' ...
info: Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for walt
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] 
info: Adding new user `walt' to supplemental / extra groups `users' ...
info: Adding user `walt' to group `users' ...
root@daniel-tablet1:~# runuser walt
walt@daniel-tablet1:/root$ cd ~
walt@daniel-tablet1:~$ mkdir -p first Documents/first photos/second
walt@daniel-tablet1:~$ find
.
./.face
./.profile
./.bash_logout
./.config
./.config/korgacrc
./.bashrc
./Documents
./Documents/first
./.face.icon
./photos
./photos/second
./first

我尝试过在非当前目录中使用 cd Documents,但它给出了一条错误消息。

在设置之前CDPATH,它是空的。通常,您无法从任何地方 cd 到该目录。

walt@daniel-tablet1:~/Documents$ echo $CDPATH # Not set

walt@daniel-tablet1:~$ cd Documents # Works from its parent directory
walt@daniel-tablet1:~/Documents$ cd /usr
walt@daniel-tablet1:/usr$ cd Documents # Doesn't work elsewhere
bash: cd: Documents: No such file or directory

如果您希望您的更改能够CDPATH=持久保存并加载到您在用户中打开的每个 shell 中,请将该行放在末尾~/.bashrc并重新启动。

然后我可以 cd Documents,不管我当前的目录是什么。

walt@daniel-tablet1:/usr$ CDPATH="/home/walt/first:/usr/local/bin:/home/walt"
walt@daniel-tablet1:/usr$ cd Documents
/home/walt/Documents

如果 cd shell 内置命令在当前目录中没有看到目标目录,它会查阅 CDPATH

不,它首先查询 CDPATH,然后检查当前目录以查找目标目录。正如 @Raffa 所说:“但是,如果设置了 CDPATH,如果 PWD 中的目录在其他地方存在且名称与 CDPATH 中列出的目录相同,则您仍然无法 cd 到该目录”。

walt@daniel-tablet1:~/Documents$ ls # There is a directory named "first" here
first
walt@daniel-tablet1:~/Documents$ cd first # But `cd`ing it sends us somewhere else according to CDPATH
/home/walt/first

我只是说,如果我从主目录以外的任何其他目录进入照片文件夹,它都会出现错误消息,对吗?

没有?我无法想象您收到的是哪种错误消息。

walt@daniel-tablet1:~/first$ echo $CDPATH # Check the value
/home/walt/first:/usr/local/bin:/home/walt
walt@daniel-tablet1:~/first$ cd photos/ # I can go to photos from anywhere
/home/walt/photos
walt@daniel-tablet1:~/photos$ mkdir second # If I make a directory name that doesn't collide
walt@daniel-tablet1:~/photos$ cd second # I can go there as expected unlike with `first`
walt@daniel-tablet1:~/photos/second$ cd /usr # Go to "any other directory than my home directory"
walt@daniel-tablet1:/usr$ cd photos # Will succeed without error message 
/home/walt/photos
walt@daniel-tablet1:~/photos$

相关内容