Macのopenコマンドのサーチパスってどれ?

コマンドラインからopenコマンドを使ったら、$PATHの通っていないはずの古いEmacsが呼ばれてしまった、というのが今回の内容です。

わたしのMacにはEmacs23とEmacs24が入っています。どちらもhomebrewでインストールしたものです。

もうあまりEmacsは使わないだろうなと思っていたのですが、また頻繁に使うようになりました。

それで新しいのがいいかなという程度の気持ちでEamcs24にアップグレードすることにしたのですが、、、

ここでopenコマンドの問題が生じました。

ターミナル上で

$ open -a "Emacs"

とするとEmacs23が呼ばれてしまうのです。最初は気づきませんでしたが、バージョンを見るとEmacs23になっています。

そこでwhichコマンドを使うと

$ which emacs
/usr/local/bin/emacs

と表示されます。このemacsはhomebrewがインストールした「../Cellar/emacs/24.3/bin/emacs」へのシンボリックリンクです。

そもそも、Emacs23は「/usr/local/Cellar/emacs/23.3b/」にしかありません。

アプリケーションフォルダにあるEmacs.appもEmacs24へのシンボリックです。

ですから、

$ open -a /Application/Emacs.app

とするとちゃんとEmacs24が起動します。なのに「open -a “Emacs”」はPATHも通っていないEmacs23を探してきてしまうのです。

もしかしたらアプリケーションとファイルの関連付けのデータベースにEmacs23が優先される情報でも残っているのでしょうか。アプリケーションのサーチだけでファイルとの関連付けはないと思うのですが。

ほかに思いつくこともなかったので、Web上で調べた方法でこの関連付けのデータベースを再構築してみることにしました。

$ /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework
/Support/lsregister -kill -r -domain local -domain system -domain user

ちょっと待ち時間があって再構築は終了したようです。そこでもういちど試しました。

$ open -a "Emacs"
Unable to find application named 'Emacs'

こんどは見つからなくなってしまいました。もちろん「open -a /Application/Emacs.app」なら問題なくEmacs24が起動するのですが。

関連付けデータベースを再構築が原因でしょうから、何でもいいから適当な拡張子に関連付けをしたら何とかなるかな、ということで拡張子「tex」のファイルの情報を開いて「このアプリケーションで開く:」を「Emacs.app」に設定してみます。

0714

「すべての変更」はグレーの表示で選択できません。Emacs.appはシンボリックリンクだからでしょうか。とりあえず1つのファイルの関連付けだけ終了して再びコマンドラインに戻って、また試します。

$ open -a "Emacs"

今度は大丈夫、Emacs24が起動しました。

結局、openコマンドのサーチパスに相当するのは、このLaunchServicesということなのでしょう。

コメント