如果 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$