私はファイル内のいくつかのプログラム、特にこの例ではdirenvを取得shell-commandしasync-shell-commandてシームレスに統合しようとしてい.bashrcます。
をカスタマイズした場合shell-command-switch、通常のインタラクティブログインシェルであるかのように、シェルプロセスでプロファイルをロードできることがわかりました。
(setq shell-command-switch(purecopy "-ic")) (setq explicit-bash-args '( "-ic" "export EMACS =; stty echo; bash"))
私はexec-path-from-shellも使用しています。
次のような~/.bashrcファイルがあるとします。
... eval "$(direnv hook $ 0)" 「foo」をエコー
内部~/code/fooには次の.envrcファイルがあります:
エクスポートPATH = $ PWD / bin:$ PATH 「バー」をエコー
set to で実行するM-x shellと、bashシェルはプロファイルを正しくロードし、direnvフックを実行してパスに追加します。default-directory~/code/foo
direnv:.envrcの読み込み バー direnv:エクスポート〜PATH 〜/ code / foo $ echo $ PATH / Users / username / code / foo / bin:/ usr / local / bin:...#残りの$ PATH
ただし、default-directoryそれでもまだ~/code/foo実行している場合はM-! echo $PATH、.bashrcは正しく読み込まれますが、現在のディレクトリのdirenvフックは実行されません。
foo / usr / local / bin:...#./binなしの$ PATHの残り
を実行しても同じ結果が得られますM-! cd ~/code/foo && echo $PATH。
対話型のシェルバッファーから送信されているshell-commandかのようにアドバイスしたり、フックしたりstart-process、動作させる方法はありますか?
eval "$(direnv hook $0)"です。これは実行されてい.envrcますが、ファイルのある特定のディレクトリにいるときに発生するはずのメカニズムは実行されません。
.envrc評価されたファイルには何もありませんか?それとも、エクスポートされないのは環境変数だけですか?これを再現できるように、完全な例を提供していただけませんか?
(setq shell-command-switch "-ic")評価した場合は、〜/ .bashrcの他のすべてのコマンドとともに評価する必要があります。