2015-01-07 18 views
10

私はhaskellとcabalの初心者ですから、単純なものがありません。"cabal install cabal-install"はOSXのカバルバージョンを更新しません

私は更新徒党インストール:

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 

1.22.0.0をインストールCABALに何が起こったのか?

答えて

12

cabalパッケージをグローバルにインストールする方法は2通りあります。その結果、cabalにはsudoが必要な場合があります。 、より一般的な解決策として

$ cabal install <PACKAGE> --global 

をファイル~/.cabal/configを編集し、Falseuser-installを設定します。

このコマンドは、グローバル<PACKAGE>をインストールします。これにより、自動的に--globalフラグが設定されるので、cabal install <PACKAGE>と書いても問題ありません。あなたはまた、それがまだない場合、それは権限の問題が発生したときcabalが自動的にrootパスワードの入力が求められますように、sudoからroot-cmdを設定することもできます

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

:ここに私のconfigファイルの抜粋です。

さらに詳しい情報はhereです。

5

~/Library/Haskell/binに更新済みのカバールがあるので、/ usr/bin/cabalをこのコピーへのシンボリックリンクに置き換えるか、このバイナリを/usr/binにコピーすることができます。

新しいカバールがデフォルトで使用されるかどうかを確認するよりエレガントな/標準的な方法がある場合、私はまだ興味があります。

+3

あなたのPATHによって決定されます。 – ErikR

+0

これらの回答をご覧ください: http://stackoverflow.com/a/21200691/3649209,http://stackoverflow.com/a/19736802/3649209 –

2

TLDR:バイナリの場所にコマンドをマップするPATHのハッシュテーブルを持っているhash -r

バッシュを実行してみてください。あなたはまだあなたのPATHのどこかに(おそらくサンドボックスに)インストールされた古いバージョンのcabalを持っているかもしれません。カバールは新しいコマンドではないので、ハッシュテーブルは古いバージョンを引き続き提供します。 hash -rはハッシュテーブルを再構築するので、シェルは新しいバージョンを正しく見つけることができます(古いものよりも前のパスに表示されている場合)。

+0

私の問題を解決しました – jojo

関連する問題