“没有这样的文件或目录:~/.oh-my-zsh/oh-my-zsh.sh”即使文件存在

“没有这样的文件或目录:~/.oh-my-zsh/oh-my-zsh.sh”即使文件存在

我试图将我的终端设置(iTerm2、zsh、oh-my-zsh、omz 主题)从旧 MacBook 转移到新 MacBook。

.zshrc真实文件位于两台笔记本电脑之间共享的 Dropbox 中,并且每台笔记本电脑都有一个~/.zshrc指向 Dropbox 文件的符号链接。

使用此设置,我在新笔记本电脑中遇到了此错误:

someuser@Someusers-MacBook-Pro ~ % source ~/.zshrc
/Users/someuser/.zshrc:source:78: no such file or directory: ~/.oh-my-zsh/oh-my-zsh.sh
/Users/someuser/.zshrc:source:112: no such file or directory: /Users/someuser/.rcsource
someuser@Someusers-MacBook-Pro ~ % ls  ~/.oh-my-zsh/oh-my-zsh.sh
/Users/someuser/.oh-my-zsh/oh-my-zsh.sh
someuser@Someusers-MacBook-Pro ~ % cat ~/.zshrc | grep oh-my-zsh
# Path to your oh-my-zsh installation.
export ZSH="~/.oh-my-zsh"
# load a random theme each time oh-my-zsh is loaded, in which case,
source $ZSH/oh-my-zsh.sh

如您所见,输出没有任何意义。它抱怨无法找到,~/.oh-my-zsh/oh-my-zsh.sh当我ls在该路径上找到时,它显示它存在。

答案1

~是您的主目录的 shell 简写,不是实际有效路径的一部分。在某些情况下,shell 会扩展~为实际路径,但如果在引号中则不会。只需替换此内容:

export ZSH="~/.oh-my-zsh"    # Doesn't work because ~ is quoted

使用以下任一方法:

export ZSH=~/.oh-my-zsh    # No quotes, so ~ expands to home directory path

或这个:

export ZSH="$HOME/.oh-my-zsh"    # Parameters do expand in double-quotes

答案2

~参数中的波浪号默认不展开,只有GLOB_SUBST设置选项时才会展开,请参阅man zshoptions。也许此选项隐藏在旧的(全局)配置中的某个地方,例如/etc/zshrc

举几个例子:

$ foo="~/.zshrc"
$ ls $foo
ls: cannot access '~/.zshrc': No such file or directory
$ ls ${~foo}
/home/user/.zshrc
$ setopt GLOB_SUBST
$ ls $foo
/home/user/.zshrc

该语法${~foo}暂时启用GLOB_SUBST当前扩展,请PARAMETER EXPANSION参阅man zshexpn

长话短说:最简单的解决方案是~在行中用export ZSH="~/.oh-my-zsh" 替换/Users/someuser

相关内容