CDPATH

CDPATH

我想知道如何将目录添加到路径(例如我的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 在查看cdpathshell 变量之前首先会自动搜索它。要附加到现有路径,请使用:

设置 cdpath=($cdpath:q ~)
:q会导致赋值中的变量扩展被引用,这样它就不会受到文件名扩展或命令替换的影响。

C shell.首先搜索,然后再搜索cdpath.

Z壳

在 Z shell 中您可以执行:

cd路径=(~)
与以下规则相同CDPATH适用与 Z shell 中;这只是指定搜索路径的更方便的语法。要附加到现有路径,请使用:

cdpath+=(~)
Z shell 与:qC shell 类似,但这种语法巧妙地避免了它的需要。

另请注意,Z shell 自动cdpathCDPATH.

答案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"

相关内容