handlename's blog

コード片など

emacsのPATHって・・・?

evernote-mode.elを使おうとするものの、なにをやっても Unknown error になってしまう。

どうやら emacs から呼び出そうとしている ruby が /usr/bin にあるものなのが原因らしい(使いたいのは macport で入れた ruby)。

M-x shell-command which ruby
=> /usr/bin/ruby

PATH と exec-path には /opt/local/bin を追加済み。

(getenv "PATH") #=> ("/opt/local/bin", ...)
exec-path #=> ("/opt/local/bin", ...)

shell-command で PATH を見ると違う結果に。

M-x shell-command echo $PATH
=> /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:...

setenv で PATH に空文字列を入れても shell-command から見た PATH は空にならない。

(setenv "PATH" "")
(getenv "PATH") => ""
M-x shell-command echo $PATH
=> /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

どうやら getenv で得られる PATH の前に強制的に /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin がつく模様。

(setenv "PATH" "/opt/local")
(getenv "PATH") => "/opt/local"
M-x shell-command echo $PATH
=> /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin

原因がわからない。別のサーバーで同じことをやったら、 shell-command でとれる方の PATH も空になった。.emacs をまっさらにしてもなったので、はemacsの設定関係ないみたい。

せめて後ろに付いてくれれば・・・。