我正在尝试获取shell-command
并async-shell-command
与.bashrc
文件中的几个程序无缝集成,在此示例中特别是direnv。
我发现,如果我进行了自定义shell-command-switch
,则可以使外壳程序进程像常规的交互式登录外壳程序一样加载我的配置文件:
(setq shell-command-switch(纯副本“ -ic”)) (setqexplicit-bash-args'(“ -ic”“ export EMACS =; stty echo; bash”))
我也在使用exec-path-from-shell。
说我有一个~/.bashrc
文件:
... 评估“ $(direnv hook $ 0)” 回声“ foo”
里面~/code/foo
我有一个.envrc
文件:
导出PATH = $ PWD / bin:$ PATH 回声“栏”
如果我运行M-x shell
与default-directory
设置为~/code/foo
,是bash shell会正确加载我的个人资料和运行direnv钩到添加到我的路径:
direnv:加载.envrc 酒吧 direnv:导出〜PATH 〜/ code / foo $ echo $ PATH /用户/用户名/代码/ foo / bin:/ usr / local / bin:...#$ PATH的其余部分
但是如果default-directory
仍然~/code/foo
运行M-! echo $PATH
,它将正确加载我的.bashrc,但不执行当前目录的direnv钩子:
富 / usr / local / bin:...#$ PATH其余部分不带./bin
如果我跑步,我会得到相同的结果M-! cd ~/code/foo && echo $PATH
。
有什么方法可以建议或挂钩它,shell-command
或start-process
使其表现得好像是从交互式外壳缓冲区发送的吗?
eval "$(direnv hook $0)"
。这正在执行,但是当您位于带有.envrc
文件的特定目录中时,不会触发该机制。
.envrc
文件中没有任何内容吗?还是只是不导出环境变量?您能否提供一个完整的例子,以便我可以尝试重现?
(setq shell-command-switch "-ic")
进行评估,则应与〜/ .bashrc中的所有其他命令一起对其进行评估。