我想知道如何将目录添加到路径(例如我的Downloads
文件夹),以便每当我cd Downloads
从任何目录键入时,我都会转到~/Downloads
.
答案1
CDPATH
如果您使用的 shell 支持CDPATH
环境变量,则可以设置
CDPATH=.:$HOME
在你的 shell 启动脚本中。然后,每当您使用cd <directory>
命令并且<directory>
不作为当前目录的子目录存在时,该命令都会将其作为主目录的子目录进行查找(例如,~/<directory>
如果找到匹配项,则会移动到那里。
目录名开始./
或../
禁止路径搜索,当然,绝对路径名也是如此,但只有某些 shell 在其手册中记录了这一点。
cd ./Downloads
不会搜索路径。
CDPATH
请注意,不同 shell的规则略有不同。
.
如果您有变量,Almquist、Korn 和 Bourne Again shell 不会显式搜索CDPATH
,因此变量必须显式包含.
前述条目,以便保留搜索当前目录的预期行为。- 相比之下,Z shell
.
首先搜索,除非CDPATH
明确包含一个.
条目或者您POSIX_CD
设置了 shell 选项;所以你可以使用CDPATH=$HOME
并且您仍然会获得搜索当前目录的行为。 (这种允许控制何时.
在路径中搜索的方法是一个古老的想法,使用命令解释器(例如 4DOS/NDOS)的 MS/PC/DR-DOS 用户会发现熟悉得令人心痛.) - 渡边贝壳搜索
.
最后的,在检查 中列出的目录后CDPATH
。
我会故意不导出 CDPATH 变量,并尝试将其效果仅限于交互式 shell。执行复杂脚本时使 CDPATH 生效可能会产生意想不到的副作用。
cdpath
为此,在 Z shell 中,您可以使用cdpath
变量而不是CDPATH
. C shell 也有,并且根本cdpath
没有。CDPATH
cdpath
是一个数组类型的shell变量,很难意外导出。作为一个数组,它比冒号分隔形式的 更容易操作CDPATH
。
C 壳和 TENEX C 壳
在 C shell 中您可以执行:
设置cdpath=(~)请注意,您不必包含,
.
因为 C shell 在查看cdpath
shell 变量之前首先会自动搜索它。要附加到现有路径,请使用:设置 cdpath=($cdpath:q ~)这
:q
会导致赋值中的变量扩展被引用,这样它就不会受到文件名扩展或命令替换的影响。
C shell.
首先搜索,然后再搜索cdpath
.
Z壳
在 Z shell 中您可以执行:
cd路径=(~)与以下规则相同
CDPATH
适用与 Z shell 中;这只是指定搜索路径的更方便的语法。要附加到现有路径,请使用:cdpath+=(~)Z shell 与
:q
C shell 类似,但这种语法巧妙地避免了它的需要。
另请注意,Z shell 自动cdpath
与CDPATH
.
答案2
如果你的意思是你想要Downloads
访问某些目录~/Downloads
,你可以在那里放置一个符号链接:
ln -s ~/Downloads .
现在,如果您想让 cd Downloads 转到 ~/Downloads,无论您在哪里执行此操作,您都可以cd
使用执行此操作的函数进行覆盖。例如通过包含.bashrc
:
cd() { if [ "$1" = Downloads ]; then builtin cd ~/Downloads; else builtin cd "$1"; fi; }
不过,我不建议更改标准命令的含义。这会引起很多混乱。如果你真的想要一个更短的,你可以创建一个名为 的别名cdDownloads
,或者甚至只是downloads
让你移动到那里:
alias downloads="cd ~/Downloads"