如何解决MacOS上zsh compinit: insecure directories问题(其他解决方案失败)

11
我知道这个问题已经有很多副本,但是它们所有的答案都建议添加一些东西。

我知道这里有很多类似的问题,但它们的答案都建议添加一些内容。

ZSH_DISABLE_COMPFIX="true"

我已将内容添加到我的~/.zshrc文件的顶部。尽管如此,每次打开zsh时都会收到相同的问候。

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

似乎其他人提出这个问题的时候,在第一个示例中没有在true周围加上引号,但我已经添加了。我也运行了source ~/.zshrc命令,据我所知,它重新加载了zshrc配置。然而,这仍然给我带来了上述警告。我不确定这些细节是否相关,但我会包括它们:

  • 这是在运行Big Sur的M1 Macbook上进行的新的zsh安装
  • 我还在zsh之上安装了Oh My Zsh
  • 我之前运行了几个export命令来设置我的nvm目录,但我认为那不会相关

有什么办法解决这个权限问题吗?谢谢

编辑:

compaudit返回

/usr/local/share/zsh/site-functions
/usr/local/share/zsh

此外,以下是我 ~/.zshrc 文件中的其他非标准条目(按顺序排列,但中间有一些内置内容):

ZSH_DISABLE_COMPFIX="true"
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
export PATH="/usr/local/opt/icu4c/bin:$PATH"
export PATH="/usr/local/opt/icu4c/sbin:$PATH"
export PATH=$HOME/bin:/usr/local/bin:$PATH
plugins=(git)
source $ZSH/oh-my-zsh.sh
zstyle :compinstall filename '/Users/jonahsaltzman/.zshrc'
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
autoload -Uz compinit
compinit

你运行了 compaudit 吗?它输出了什么? - Marlon Richert
1
@MarlonRichert 刚刚更新了问题,但 compaudit 给出的不安全目录是 /usr/local/share/zsh/site-functions 和 /usr/local/share/zsh。 - the_midnight_developer
这个有帮助吗?链接 - user1934428
2个回答

19
首先,这里的一个问题是你在运行compinit时重复了两次:一次是通过Oh My Zsh (OMZ) - 当你执行source $ZSH/oh-my-zsh.sh时 - 另一次是手动执行。你有两个选项来解决这个问题:
  • 如果你想继续使用OMZ,那么你应该从你的.zshrc文件中删除底部的3行。
  • 如果你想停止使用OMZ,那么你应该删除plugins=(git)source $ZSH/oh-my-zsh.sh
其次,注意$ZSH_DISABLE_COMPFIX是特定于OMZ的,不被compinit本身使用。当你手动调用compinit时,它没有任何效果。你可以从你的.zshrc文件中删除它。

最后,compinit 并不是无缘无故地显示那个警告。与其抑制它,你应该在 compaudit 列出的目录上执行 chmod g-w,o-w。这样可以解决问题并消除警告。

注意:如果你通过 Homebrew 安装了 zsh,并且在同一台 Mac 上有多个用户,那么很遗憾,你无法让其他用户消除这个警告,只有安装 Homebrew 的用户可以。这是 Homebrew 在权限管理方面的已知缺陷,目前还没有解决办法。在这种情况下,唯一的解决方案是让其他用户通过向 compinit 传递 -u 标志来绕过安全检查。


太棒了,谢谢!我从我的/.zshrc中删除了手动compinit(根据您的答案,OMZ运行自己的compinit,因此在我的/.zshrc中是不必要的),并对compaudit返回的两个目录运行了chmod g-w,o-w,现在警告已经消失。出现了一个新消息,即oh-my-zsh.sh不存在,我也从~/.zshrc中删除了source $ZSH/oh-my-zsh.sh。现在zsh像新的一样干净,尽管我不确定那个oh-my-zsh.sh是什么或者为什么会在那里。 - the_midnight_developer
在运行命令 curl -s https://get.sdkman.io | bash 后,我在终端中开始看到这个问题。阅读了这个答案后,我检查了我的 .zshrc 文件,发现最后三行是关于 skin 的,而我并不想使用它。删除了这部分内容后,我再也没有在终端中遇到那个问题了。 - ASAD HAMEED

5

您想使用:

compinit -u

为了关闭烦人的权限测试。在macOS上它并没有增加任何安全性。请查看zshcompsys(1)文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接