关于CDPATH环境变量的多个技术疑问
嘿,我来逐个帮你理清这些关于CDPATH的疑问:
什么是“DIR”?
这里的DIR就是你执行cd命令时后面跟着的目标目录参数呀。比如你敲cd my-projects,这里的my-projects就是DIR;如果是cd /var/log,那这个绝对路径/var/log就是DIR。CDPATH不是命令,是环境变量对吗?
完全没错!CDPATH根本不是命令,它是bash的环境变量,专门用来给cd命令定义一个搜索路径,帮你不用输入完整路径就能快速跳转到常用目录。示例里的CDPATH包含带/的路径,但为什么说“如果DIR以/开头,CDPATH就不被使用”?
这里要搞清楚两个概念:CDPATH里的是搜索目录列表,而规则里的“DIR以/开头”指的是你cd命令的目标参数是绝对路径的情况。举个例子:
你的CDPATH设为"/home/walt/first:/usr/local/bin:/home/walt",如果你执行cd /usr/local/bin,这时候DIR是绝对路径,bash就直接跳转到这个路径,不会去CDPATH里搜索;但如果你执行cd bin,bash就会依次在CDPATH的每个目录下找有没有叫bin的子目录,找到的话就直接跳过去。什么是null directory name?
null directory name就是CDPATH里的空条目,比如你设置CDPATH=:/home/walt/first(开头的冒号前是空),或者CDPATH=/home/walt/first::/usr/local/bin(两个冒号之间是空)。这个空条目等价于当前工作目录,意思是bash会优先在当前目录里查找你要cd的DIR,再去CDPATH的其他目录搜索。示例里的CDPATH是不是要直接在终端输入?
可以直接在终端输入CDPATH="/home/walt/first:/usr/local/bin:/home/walt",但这种设置是临时生效的,关闭终端后就会失效。如果想让它永久生效,你需要把这条命令添加到你的~/.bashrc或者~/.bash_profile文件里,保存后重新打开终端,或者执行source ~/.bashrc就能立即生效。输入
CDPATH=后返回空是什么情况?
当你执行CDPATH=时,是把CDPATH这个环境变量设置成了空值,所以之后如果你用echo $CDPATH查看的话会返回空。这时候cd命令就会恢复默认行为——只在当前目录跳转,或者直接使用你输入的绝对路径,不会再利用CDPATH的搜索路径了。
备注:内容来源于stack exchange,提问作者Guilherme Woolley

