如何利用CDPATH实现从任意目录快速cd到Documents目录?
别急,我来把CDPATH的用法给你讲明白,解决你从任意目录直接cd Documents的问题!
首先得搞懂CDPATH到底是干嘛的:当你用cd命令输入一个相对路径(比如Documents,不是以/开头的绝对路径),如果当前目录里找不到这个目标目录,shell就会自动去CDPATH里列出的目录挨个查找——只要在某个目录下找到叫Documents的子目录,就会直接跳过去。但如果你输入的是绝对路径(比如/home/yourname/Documents),那CDPATH就不会生效,shell会直接去指定的路径。
那具体怎么设置才能实现从任意目录cd Documents呢?跟着这几步来:
第一步:确认你的Documents绝对路径
一般来说,你的Documents目录就在家目录下,你可以用echo ~/Documents命令确认它的完整路径,比如输出可能是/home/guilherme/Documents,那它的父目录就是/home/guilherme(或者直接用~代替)。第二步:临时设置CDPATH测试效果
在终端里输入这条命令:export CDPATH="~/"这样就把你的家目录加到了CDPATH里。现在你随便切换到其他目录,比如
cd /tmp,然后输入cd Documents,试试是不是直接跳转到你的Documents目录了?如果还想加其他常用目录到CDPATH里,就用冒号分隔,比如:
export CDPATH="~/:/home/guilherme/work:/usr/local/share"第三步:让设置永久生效
上面的临时设置重启终端就会失效,所以要把配置加到你的shell配置文件里:- 如果你用的是bash,就编辑
~/.bashrc文件,把export CDPATH="~/"加进去; - 如果你用的是zsh,就编辑
~/.zshrc文件;
改完之后,要么重启终端,要么输入source ~/.bashrc(对应你的配置文件)让设置立刻生效。
- 如果你用的是bash,就编辑
你之前直接输cd Documents报错,就是因为没设置CDPATH,当前目录又没有Documents这个子目录,shell不知道该去哪里找。而设置CDPATH之后,shell就会按照你指定的目录顺序去查找这个子目录,找到就跳转啦。
举个例子,要是把CDPATH设成"/home/walt/first:/usr/local/bin:/home/walt",当你输cd Documents时,shell会先去/home/walt/first里找有没有Documents,没有就去/usr/local/bin找,最后去/home/walt找——而这里刚好有Documents,所以就成功跳转了。
备注:内容来源于stack exchange,提问作者Guilherme Woolley

