2

OS X 10.8.3 では、次のような環境があります。

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.
$ echo $PATH
/Users/r/Desktop/Beryl/usr/bin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:/usr/local/bin:/usr/X11R6/bin

irbによって適切に報告されているように、$PATH には の 2 つのコピーがありますwhich

$ which -a irb
/Users/r/Desktop/Beryl/usr/bin/irb
/usr/bin/irb

しかし、実行irbすると、/Users/r/Desktop/Beryl/usr/bin/irb; を取得することが期待されます。代わりに、/usr/bin/irb を取得します。

$ irb --version
irb 0.9.5(05/04/13)          # this is the wrong version
$ /Users/r/Desktop/Beryl/usr/bin/irb --version
irb 0.9.6(09/06/30)
$ /usr/bin/irb --version
irb 0.9.5(05/04/13)

エイリアスはありません。次のスクリプトを実行して bash を起動したことに注意してください。

#!/bin/sh
export PATH=/Users/r/Desktop/Beryl/usr/bin:${PATH}
exec /bin/bash

それにもかかわらず、bash が $PATH の最初のインスタンスを実行していないのはなぜですか?

4

2 に答える 2

3

以下を使用して、irb が実行されている場所を特定します。

type irb

記憶された場所をすべて忘れるように bash シェルを作成するには、次を使用します。

hash -r

bash シェルには、以前の場所がirb内部ハッシュに保存されているようです。

bash のハッシュの詳細については、http: //linux.about.com/library/cmd/blcmdl1_hash.htmを確認してください。

于 2013-03-29T14:27:07.473 に答える
2

問題を引き起こしているのはハッシュである可能性があります。プログラムを最初に実行するとPATH、 が読み取られますが、bashその場所が内部ハッシュに保存されます。の値に関係なく、後で (同じセッションで) このハッシュを使用します$PATH

コマンドで既存の場所を一覧表示しhashます。

でハッシュをクリアできますhash -r

編集:連想配列も参照してくださいBASH_CMDS

于 2013-03-29T12:55:15.007 に答える