如何使emacs shell自动执行init文件?

13

我的bash初始化脚本(~/.profile)包含重要的初始化内容,但每当我在emacs中使用shell-command或编译时,该初始化文件都不会被读取,没有这些初始化,我的emacs bash命令将失败:(如何强制emacs执行我为shell-command所使用的shell的init文件?

澄清一下:我不是在谈论M-x shell,当我将.profile符号链接到.emacs_bash时,它可以很好地读取我的init文件。

3个回答

22
将初始化程序移动到您的~/.bashrc文件中。然后添加以下行:
source ~/.bashrc

把内容加入到~/.bash_profile文件中。关于启动文件的加载详细解释,请查看bash手册页。关键在于交互式和非交互式shell以及登录和非登录shell之间的区别。

通常情况下,当使用shell登录到系统时会运行.bash_profile,而当启动一个新的shell时会运行.bashrc(OS X Terminal应用程序是这个规则的例外,因为它对每个新的终端实例运行.bash_profile)。想要了解更多信息,请参考这篇文章


1
我将我的.profile文件链接到了.bashrc和.bash_profile两个文件,但似乎仍然无法正常工作。Emacs启动交互式还是非交互式shell?我还尝试在explicit-bash-args中添加--login参数,但仍然没有成功。 - polyglot
1
啊,现在我又可以爱上我的Emacs shell了!谢谢!:D - Dan Filimon
@DanFilimon 这也是我的问题的完整解决方案! :) Emacs shell 现在可以与 nvm 一起使用了! - geoyws

5
我正在使用 Mac,shell 命令没有执行 .bashrc 或 .bash_profile。我谷歌了一下解决方法以修复 PATH 问题。
在你的 .emacs 文件中加入以下内容: (setenv "PATH" (shell-command-to-string "source ~/.bashrc; echo -n $PATH"))
更多细节请参考:如何让 emacs 运行我的 ~/.bash_profile

2

浏览elisp源代码,似乎emacs中的shell-command只是在我的情况下执行bash -c "command"。解决方案是在已经执行了我的.profile文件的shell中启动emacs(emacs &),而不是从我的窗口管理器的GUI菜单中启动emacs。


谢谢,多语种编程者,从终端启动emacs对我也有用。 - Upgradingdave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接