質問
いることができるよう、コンパイルコマンド(レーキキュウリ)のプログラムを通じて、特定のrubyバージョンもMac OS Xシステムを使っていrvmこのためには、現在の端子です。私は~/.MacOSXできます。plistは、正しい道ですが、emacsを主張prependingることでどちらがいいでしょうか?こ:
(when (equal system-type 'darwin)
(setenv "PATH" (concat "/Users/fearoffish/.rvm/bin:/Users/fearoffish/.rvm/rubies/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249%global/bin:/Users/fearoffish/.rvm/bin"))
(push "/Users/fearoffish/.rvm/bin" exec-path)
(push "/Users/fearoffish/.rvm/rubies/ruby-1.8.7-p249/bin" exec-path)
(push "/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249/bin" exec-path)
(push "/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249%global/bin" exec-path)
(push "/Users/fearoffish/.rvm/bin" exec-path))
また、絶望的な試みのemacs初心者にうございました。で まだ prependsの目の前で私の経路になってしまってい:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/fearoffish/.rvm/bin:/Users/fearoffish/.rvm/rubies/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249%global/bin
僕は/usr/binおよびその他prependingたいと思い 私 パスの最初の行を前に追加されパスの終うことも問題です。
私はこの試験による単純に開Aquamacs動 meta-x compile
その echo $PATH
.
そのアイデア?
解決
小さな改造解決のsanityinc(な方法で入力し、コメント以上であることだけですか?)
- 使ってい
-l
オプションのシェルをログインシェルを読み込み.profile
または.bash_profile
ではなく対話型シェルのみを読み込み.bashrc
). - 人生を楽しむことができるようにトリミングの文字列に返されるパスとして検査を示して改行潜入します。
修正コード:
(defun set-exec-path-from-shell-PATH ()
(let ((path-from-shell
(replace-regexp-in-string "[[:space:]\n]*$" ""
(shell-command-to-string "$SHELL -l -c 'echo $PATH'"))))
(setenv "PATH" path-from-shell)
(setq exec-path (split-string path-from-shell path-separator))))
(when (equal system-type 'darwin) (set-exec-path-from-shell-PATH))
他のヒント
誰も、元の問題を誤解しているようだ:パスは、Emacsに正しくすでにセットアップされ、そして正しいパスは、すでにコンパイル・コマンドによって開始されたシェルに渡されます!だから何ができますか?ここに答えがあります:
のMacOS Xでは、path_helper(1)
と呼ばれる小さなツールがあります。これは、シェルの起動時にバッシュによって実行される/etc/profile
、からデフォルトで呼ばれています。あなたがEmacsのからコンパイルを開始すると、それは(デフォルトでのMacOS XのBashである)シェルを起動し、そのためこのpath_helper
ツールを実行します。そして、ここで重要なポイントは来る:path_helper
のカスタム追加のディレクトリ、あなたが最初にそれらを追加どんなに目の前に/usr/bin
のような標準ディレクトリを移動し、のパスを再配置します。 /usr/lib/path_helper
を実行し、結果のPATHを見て、シェルを開き、最初の何であるかPATHを見て持っていることによって、この自分を試してみてください、そして!
あなたのための強引な解決策は、単純にpath_helper
に/etc/profile
の呼び出しをコメントアウトするかもしれません。その後、あなたは自動的にツールの主な目的である/etc/paths.d
、によってpath_helper
セットアップのパスを取得することはできませんことに注意してください。
私は、Macを持っていないので、私は直接これをテストすることはできませんが、これはすべての*情報*ページ<のhref = "http://www.gnu.org/software/emacs/manualで見つけることができます/html_node/emacs/Interactive-Shell.html」のrel = "nofollowをnoreferrer">インタラクティブ下位シェルでます。
あなたがEmacsでシェルを起動すると、生成された取得し、プロセスはEmacsの変数explicit-shell-file-name
中のプログラムである(そしてそれがnil
であれば、環境変数ESHELL
とSHELL
が使用されている)。
これは、その後~/.emacs_*shellname*
の内容を送信し、あなたのシェルがcsh
ある場合(例えば、その後、~/.emacs_csh
を介して送信されるだろう。また、csh
プログラムのための適切な.RCファイルが供給され、あなたにもいることを更新できるように(私の場合の.cshrc
に)。また、あなたはそれがシェルを実行する前にEmacsが設定した環境変数INSIDE_EMACS
()のチェックと.RCファイル内のカスタマイズをラップすることができます。
あなたはシェルではなく、Emacsの変数exec-path
にパスを変更するためにこれらのファイルを更新する必要があります。 exec-path
- のEmacsののは、実行可能プログラムを検索するために使用するディレクトリのリストだけです。実行ファイルの動作がexec-path
への変更による影響を受けません。
私はかなり醜いMacでenvironment.plistスキームを見つけるので、私はあなたがEmacsがあなたのTerminal.appで見る同じパスを使用したいと仮定し、次のスニペットを使用します:
(defun set-exec-path-from-shell-PATH () (let ((path-from-shell (shell-command-to-string "$SHELL -i -c 'echo $PATH'"))) (setenv "PATH" path-from-shell) (setq exec-path (split-string path-from-shell path-separator))))
(これはEmacsの23で私のために動作します。他のバージョンでそれを試していないが、私はそれが動作することを期待したい。)
多分これを試してみてください。あなたのパス文字列を置き換えます。
(アドオンに-list「のload-pathに "〜は/ opt /スワンク-のClojure / SRC / emacsの")
私の知る限り観察されるように、Emacsはその一つの解決策は、Emacsを起動する前に、シェルで$ PATHを変更することがあり、それはから起動されるシェルからパス変数を取ります。
より柔軟性があり、私が使用し、もう一つのアプローチは、あなたが持っているコマンドを作るMakefileを使用して、「ソース〜/ script_that_set_path」を追加し、それぞれの目の前にすることです。
私はセットアップ私のコンパイルコマンド環境へのemacsを使用していない終わっこれに非常に多くの異なるアプローチを試してみました。
私が今やっていることは、単純にクリーンな環境を初期化してから、
exec $*
への引数として渡されたコマンドを実行するためにrun_helper.sh
を使用していますrun_helper.shファイルを作成することです
このrun_helper.sh
は通常、特定のプロジェクトですが、私は、私は新しいプロジェクトを作成するときに起動するために使用するテンプレートをキープます。
compile
ようにEmacsからそれから私の単純な実行bash run_helper.sh rspec path/to/tests
ます。
私はRubyのテストを実行するために、これを使用していた場合、私のヘルパーはRVMが適切なルビーとgemsetを使用することを初期化します。私はいくつかの他の言語を使用していますそれだけで必要な環境変数をエクスポートしたり、他のいくつかの初期化を実行しますが、この方法は、私はいつもEmacsのパスと混乱とelispのたびに持つのではなく、bashスクリプトでそれを行うことができている場合、私は新しいプロジェクトを開始します。
ここでrun_helper.sh
ファイルの例です。
#!/bin/bash
cd /Users/simao/Documents/sp
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
source "$HOME/.rvm/scripts/rvm" # This loads the proper ruby and gemset from .rvmrc
export RAILS_ENV=test
exec $*
これはまた、私は私はいくつかのテストを実行するためにロードする必要はありません、私の.zshrc
中のものがたくさんあるので、私のテストを高速に実行できます。
これは2つのことを私のために働いています。
まず、私が続くsanityincアドバイス
のコードスニペットの改善された修正されたバージョンは、現在のexec-パスからのシェルと呼ばれるelispのライブラリとして公開されています。インストール可能なパッケージは、
マーマレードとMelpaでご利用いただけます
私はまだ、コンパイルコマンドに問題がありました。 Valko Sipuliはpath_helperに関わる問題が発生した権利である。
私は、/ etc /プロファイルに対応する行をコメントし、それが助けにはなりませんでした。まだそこに問題があります。 私はbashのが、zshのを使用しないでください。少し掘りIは、/ etc / zshenvを見つけました。このファイルには、path_helperを呼び出します。
でpath_helperセクションをコメントした後の/ etc / zshenv私のパスが最終的に正しいです。