OS X のemacsをシェルから起動してもPATHが引き継がれなくなった問題
起こったこと
あるとき気がついたら,YaTeXのC-c t j
やC-c t b
が効かなくなっていた.
具体的には,
/bin/bash: platex: command not found
というメッセージが出て止まってしまう.
ターミナルでは,
which platex /Library/TeX/texbin/platex
となる一方,M-! which platex
とすると何も表示されないので,platexのパスが通っていないらしい.
やってみたこと
emacsが参照しているパスを確認するには,環境変数を確認するコマンドM-x getenv
からPATH
を選択する.
/use/bin:/bin:/usr/sbin:/sbin
なるほど全然ダメだ.
tasuwo.github.io
最初はYaTeXの問題かと思ったので,M-x describe-variable
からtex-command
を見てみたものの,
tex-command is a variable defined in ‘yatex.el’. Its value is "platex" This variable may be risky if used as a file-local variable. Documentation: ∗Default command for typesetting LaTeX text. Overridden with ‘%#! CommandLine...’ in the buffer.
となるので,.emacs
やyatex.el
のplatex
に正しいパスを追記してみるも,効果なし.
また,M-! source ~/.bash_profile
などとやってみても効果なし.
解決した方法
emacsには変数PATH
とexec-path
があり,M-!
などでの実行時に読まれているのはM-!
らしい.
おそらくもっとも簡便なのは,exec-path-from-shell
を設定すること.
sakito.jp
keisanbutsuriya.hateblo.jp
github.com
このときのトラブルのためか,M-x package-install
が正常に動作しなかったので,M-x package-list-packages
で一覧から探してインストールした.
ついで.emacs
(など)に,
(when (memq window-system '(mac ns x)) (exec-path-from-shell-initialize))
と書いて,再起動.
無事PATHは引き継がれるようになり,YaTeXも正常に動作するようになりました.
しかしなんでシェルから起動してるのに引き継がれないのだろう.
しばらくして
なぜか.bash_profile
, .bashrc
, .emacs
, .Rprofile
のテキストがすべて消えるという謎現象が起こった.