私はOSXを使用しており、GNU coreutilsを取得するためにHomebrewをインストールしました。代わりにgsort
プリインストールされたコマンドを使用したかったので、へのsort
シンボリックリンクを作成しましたgsort
。限られた経験によると、sort
CLまたはスクリプト内で実行すると使用されますが、gsort
そうではありません。
$ which gsort; which sort
/usr/local/bin/gsort
/usr/local/bin/sort
$ ll /usr/local/bin/ | fgrep sort
1083450 lrwxr-xr-x 1 alex admin - 34B Mar 23 15:56:52 2016 gsort@ -> ../Cellar/coreutils/8.25/bin/gsort
1083466 lrwxr-xr-x 1 alex admin - 35B Mar 23 15:56:52 2016 gtsort@ -> ../Cellar/coreutils/8.25/bin/gtsort
1088327 lrwxr-xr-x 1 alex admin - 34B Mar 23 16:57:41 2016 sort@ -> ../Cellar/coreutils/8.25/bin/gsort
$ echo ${PATH}
/usr/local/opt/gnu-sed/bin/:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
$ gsort --version | fgrep GNU
sort (GNU coreutils) 8.25
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
$ /usr/local/bin/sort --version | fgrep GNU
sort (GNU coreutils) 8.25
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
$ sort --version | fgrep GNU
sort (GNU coreutils) 5.93
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
gsort
とバージョンを確認するとsort
(symlinkの絶対パスを使用するとき)、最新のcoreutilsバージョンが正しく表示されますが、実行すると、以前にインストールされている以前のバージョンがsort
表示されます。誰でも理由を教えてもらえますか?
答え1
sort
シンボリックリンクをインストールする前に同じシェルセッションで開始すると、パスbash
検索結果がキャッシュされます。type sort
答えがあるかどうかを判断するために使用されますsort is hashed (/usr/bin/sort)
。