为什么 dot 命令(源代码)对 zsh 中没有路径的文件不起作用?

jos*_*t21 9 linux bash zsh shell

我最近从 bash 切换到 zsh。在 bash 中,我.为源命令使用了点别名,例如

. .bashrc
Run Code Online (Sandbox Code Playgroud)

它适用于. .bashrc, . ~/.bashrc, . ./.bashrc

但是,对于 zsh,点别名的工作方式不同。它仅适用于文件的路径。但如果我使用没有路径的文件,则不会:

这不起作用:

. .zshrc
Run Code Online (Sandbox Code Playgroud)

它会给我这个错误: .: no such file or directory: .zshrc

但这些都有效:

source .zshrc
. ./.zshrc
. ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

use*_*686 9

这实际上dot 命令的标准行为它使用 $PATH 搜索,就像运行命令时一样——而不是常规的相对路径。因此,您可以在例如 ~/bin/ 中拥有您的公共库,并且只需. libwhatever.sh从任何目录加载它们。

执行直接相对路径查找是一种非标准的 Bash 扩展。

(同样, dot.实际上是“shell 语言”标准中列出的主要命令,并且source是特定于 shell 的别名——而不是相反。)

  • 谢谢,只是出于好奇,有没有办法让 zsh 具有“bash”行为? (3认同)
  • 只要相对路径包含斜杠,就可以接受,因此 `. ./.bashrc` 将从当前目录获取源。该手册没有提供任何完全匹配 bash 行为的选项 - 您必须使用“source”或将当前目录放入 $path(这是一个糟糕的主意)。 (2认同)