将目录添加到路径

Ate*_*ten -3 directory path cd-command

我想知道如何将目录添加到路径(例如我的Downloads文件夹),以便每当我cd Downloads从任何目录键入时,我都会转到~/Downloads.

tel*_*coM 5

CDPATH

如果您使用的外壳支持CDPATH环境变量,则可以设置

CDPATH=.:$HOME
Run Code Online (Sandbox Code Playgroud)

在您的 shell 启动脚本中。然后,每当您使用cd <directory>命令并且<directory>不作为当前目录的子目录存在时,该命令将查找它作为您的主目录的子目录(例如,~/<directory>如果找到匹配项,它将移动到那里。

目录名开始./../禁止路径搜索,当然绝对路径名也是如此,但只有一些 shell 在他们的手册中记录了这一点。 cd ./Downloads不会搜索路径。

请注意,CDPATH不同 shell的规则略有不同。

  • .如果您有CDPATH变量,Almquist、Korn 和 Bourne Again shell 不会显式搜索,因此该变量必须显式包含.前面给出的条目,以保留搜索当前目录的预期行为。
  • 相反,Z shell.首先搜索,除非 CDPATH明确包含一个.条目或者您设置了POSIX_CDshell 选项;所以你可以使用

    CDPATH=$HOME

    并且您仍将获得搜索当前目录的行为。(这种允许控制何时.在路径中搜索的方法是一个古老的想法,使用命令解释器(例如 4DOS/NDOS )的 MS/PC/DR-DOS 用户会非常熟悉。)

  • Watanabe shell在检查 中列出的目录后. 最后搜索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 中,您可以执行:

cdpath=(~)
CDPATHZ shell 中的规则相同;这只是用于指定搜索路径的更方便的语法。要附加到现有路径,请使用:

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

另请注意,Z shell 会自动cdpathCDPATH.