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
コマンドが正しいパスを与える理由はありますか?
バージョンをインストールしてから別のバージョンを別の場所にインストールした場合、シェルは元のパスをキャッシュ(ハッシュ)します。このキャッシュはhash -r
でクリアできます。次にコマンドを実行すると、新しいパスで再ハッシュされます。
このキャッシュはグローバルではないことに注意してください。実行中のシェルが複数ある場合は、それぞれを更新する必要があります。
which
が正しいパスを認識する理由については、 "which
を使用しない理由" は適切な情報源ですが、簡単な答えはwhich
は、シェルのパスキャッシュを認識しない外部コマンドです。