"cabal install cabal-install" 不更新 OSX 中的 cabal 版本

"cabal install cabal-install" doesn't update cabal version in OSX

我是 haskell 和 cabal 的新手,所以我可能遗漏了一些简单的东西。

我更新了 cabal-install:

sudo cabal install cabal-install
Password:
Resolving dependencies...
Configuring cabal-install-1.22.0.0...
Building cabal-install-1.22.0.0...
Installed cabal-install-1.22.0.0
Updating documentation index

但是 cabal --version 说:

cabal-install version 1.18.0.5
using version 1.18.1.4 of the Cabal library 

cabal-install 1.22.0.0 发生了什么?

我看到 ~/Library/Haskell/bin 有一个更新的 cabal,所以我可以用符号 link 替换 /usr/bin/cabal 到这个副本,或者我可以将这个二进制文件复制到 /usr/bin.

如果有更多 elegant/canonical 方法来确保默认使用新的 cabal,我仍然很感兴趣。

有两种方法可以cabal全局安装包。请注意,因此,cabal 可能需要 sudo。

此命令将全局安装 <PACKAGE>

$ cabal install <PACKAGE> --global

作为更通用的解决方案,编辑文件 ~/.cabal/config 并将 user-install 设置为 False。这将自动设置 --global 标志,因此您可以放心地编写 cabal install <PACKAGE> 。这是我的 config 文件的片段:

...
-- split-objs: False
-- executable-stripping: True
user-install: False
-- package-db:
-- flags:
...

如果还没有,您可能还想将 root-cmd 设置为 sudo,这样 cabal 会在遇到权限问题时自动提示输入 root 密码。

网上有更多信息here

TLDR:尝试 运行 hash -r

Bash 有一个 PATH 哈希表,它将命令映射到二进制文件的位置。您可能仍然在 PATH 中的某处安装了旧版本的 cabal(可能在沙箱中)。由于 cabal 不是新命令,哈希表将继续提供旧版本。 hash -r 重建哈希表,因此 shell 将正确找到新版本(前提是它在您的路径中出现的时间早于旧版本)。