私はファイル内のいくつかのプログラム、特にこの例では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の他のすべてのコマンドとともに評価する必要があります。