在安装 OH MY POSH 时,出现这两个错误,尽管第二个错误是一个错误(已报告)。我已在 ~/.zshrc 中添加了/usr/local/bin
$PATH 中的目录,并在回显时显示。我不明白为什么它告诉我安装目录不在 $PATH 中。
答案1
您收到此错误是因为您正在使用 运行 bash 脚本zsh
。安装时请始终遵循说明。您正在使用 以 root 身份运行此脚本sudo
,这是一个糟糕的想法(您真的不想盲目地将下载的 shell 脚本导入 root shell),而不是 安装说明建议。
然后,你用 运行了一个 bash 脚本zsh
。这就是导致错误的原因。你可以用这个小代码片段重现它,它只是install.sh
脚本中相关代码的一个稍微简化的版本:
p="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
install_dir="/usr/local/bin"
good=$(
IFS=":"
for path in $p; do
if [ "${path%/}" = "${install_dir}" ]; then
printf 1
break
fi
done
)
if [ "${good}" != "1" ]; then
echo "Installation directory ${install_dir} is not in your \$PATH"
else
echo "Dir $install_dir FOUND!"
fi
如果使用 bash 运行它,它会按预期工作并打印已找到目录:
$ bash ~/scripts/foo.sh
Dir /usr/local/bin FOUND!
但是,运行它zsh
会返回您看到的错误:
$ zsh ~/scripts/foo.sh
Installation directory /usr/local/bin is not in your $PATH
这是因为在 zsh 中,除非通过 或 明确请求 SH_WORD_SPLIT 选项,否则不会在 IFS 上拆分未引用的字符串。因此$p
,上的字符串比较只执行一次,而 上的整个 则在 LHS 1上执行。setopt shwordsplit
$=p
${=p}
for path in $p; ...
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
因此,使用编写脚本的 shell 运行该脚本,它应该可以按预期工作。如果您 100% 确信它是安全的,您可以使用sudo
它安装在默认/usr/local/bin
目录中:
curl -s https://ohmyposh.dev/install.sh | bash -s
或者,为了更安全一点,只需为你的用户安装
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d ~/bin
1.path
在 zsh 中用作用户变量也是不行的 - 就像在 csh 中一样,它path
是一个数组版本,PATH
分配给它会破坏后续的命令查找 - 尽管在这种情况下效果只是$(...)
命令替换的本地效果。