zsh 无法在 ~/bin 中找到或执行自定义用户脚本,尽管它们是可执行的并且位于 $PATH 环境变量中

por*_*org 4 macos config zsh environment-variables macos-catalina

问题:

我最近从 macOS Mojave 10.14.6 升级到 macOS Catalina 10.5.5。

现在这zsh是默认的 shell,我将其迁移.bashrc.zshrc

  • 别名工作正常。
  • 但由于某些无法解释的原因,我的自定义用户脚本在~/bin/my/~/bin/dev/
    • 未通过自动完成完成
    • 完全输入时无法唤起,然后我得到zsh: command not found: myScript.sh

调查与故障排除:

  • 当将 shell 改回 bash 时,一切仍然有效,因此可以排除操作系统更新导致的数据丢失/损坏,这一定是配置问题。
  • 我的所有脚本文件都有可执行标志。
  • 它们所在的目录位于 $PATH 环境变量中。
    • 证明:echo $PATH给出/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/usr/local/sbin:~/bin/bin:~/bin/my:~/bin/dev:

实验:

  • 我尝试设置/附加 $PATH 变量,带或不带export。--> 没有区别。
  • 我尝试了各种可能的配置文件: .zprofile .zshrc --> 没有区别。
  • 我硬链接了 bash 和 zsh 配置文件并包含:alias test123="echo test123"
    • 此别名适用于 bash 和 zsh。所以这不可能是加载配置文件链中的问题。
  • 我尝试了不同的 shebang 语法 --> 没有区别。无论如何,使用完整路径直接调用始终有效。

por*_*org 5

我在William Pursell 的回答中找到了解决方案zsh PATH 的奇怪行为的

\n
\n

尝试使用 $HOME 而不是 ~。在许多情况下,当您期望 shell 扩展时,它们不会扩展,通常最好使用 $HOME。~ 实际上只是为了成为交互式使用的捷径。

\n
\n

从那时起,zsh 按预期工作,并在我用我的变量~/bin/*替换所有~波浪号占位符后考虑了我的所有自定义用户脚本。$HOME$PATH替换为. \xe2\x80\x94 一个错误的字符可以产生多么大的差异!

\n

  • 引用并不是特别有趣;大多数字符在引用时都会失去其特殊含义。有趣的是,`~` 通常仅在它是单词的第一个字符时才展开,但当它紧跟在 `=` 或 `:` 后面时会出现例外(以允许在赋值和类似路径中进行扩展)设置)。通常,您可以省略对赋值值的引用,因为路径名扩展和全局扩展都不是问题(尽管仍必须引用空格,以避免提前终止赋值)。 (2认同)