web-dev-qa-db-ja.com

インストールされたプログラム実行可能ファイルが間違った場所から実行される

Ubuntuにparcelliteをインストールしました( http://parcellite.sourceforge.net/ からダウンロード)

ソースからインストールした後、Sudo make install、下の場所に設置されていることがわかります。

ただし、実行しようとすると、別のパスから実行しようとします。何故ですか?

user$ which parcellite
/usr/local/bin/parcellite

user$ parcellite -h
bash: /usr/bin/parcellite: No such file or directory

$PATHは以下の通りです

/home/user/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

実行可能ファイルの所有権を次のように変更してみました。それでも問題は解決しません。

user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 root root 452K Oct  7 21:00 /usr/local/bin/parcellite
user$Sudo chown user:user /usr/local/bin/parcellite
user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 user user 452K Oct  7 21:01 /usr/local/bin/parcellite

古いバージョンのparcelliteをインストールしました。しかし、私は新しいバージョンをインストールする前にそれを削除しました。


更新:@Foxのソリューションは機能します。しかし、whichが更新されていないにもかかわらず、hashコマンドが正しいパスを与える理由はありますか?

5
xxx374562

バージョンをインストールしてから別のバージョンを別の場所にインストールした場合、シェルは元のパスをキャッシュ(ハッシュ)します。このキャッシュはhash -rでクリアできます。次にコマンドを実行すると、新しいパスで再ハッシュされます。

このキャッシュはグローバルではないことに注意してください。実行中のシェルが複数ある場合は、それぞれを更新する必要があります。

whichが正しいパスを認識する理由については、 "whichを使用しない理由" は適切な情報源ですが、簡単な答えはwhichは、シェルのパスキャッシュを認識しない外部コマンドです。

5
Fox