如何让Emacs在启动时具有读取我的bashrc文件后的环境?

3
在我的.emacs文件中,我有一些使用由.bashrc定义的环境变量的内容。
如果我首先打开一个终端(自动读取我的bashrc),然后从那里打开emacs,我可以让所有东西都正常工作。但是,如果我从GNOME的活动中打开它,就不行了。
是否有一种方法可以仍然从GNOME的活动中打开emacs,但它具有.bashrc的环境呢?原始答案:Original Answer
3个回答

4

你应该将环境变量定义在你的~/.profile文件中,而不是在~/.bashrc文件中,这样它们只会在登录时加载一次,而不是每次启动shell时都加载,当从活动中默认启动时,emacs将可以访问它们。

但是如果你想这样做,你可以设置一个自定义快捷键以从登录shell启动emacs:例如,=>设置->键盘->创建自定义快捷键并使用如下命令:bash -l -c 'emacsclient -nc -a "" &' 从登录shell启动emacs,这将读取你的.bashrc文件。


在~/.profile中设置路径对我没有帮助 :( - Asalle
@Asalle on Gnome? - Rorschach
是的,Gnome(+Wayland如果有关系的话)。我用getenv检查了在PATH中设置的值,发现它是一种被截断的路径。最后我使用了exec-path-from-shell。所以现在我想知道,Emacs最初是从哪里获取到这个被截断的路径的?所有图形应用程序都是这样吗? - Asalle
@Asalle 如果你有~/.bash_profile文件,可能需要将其删除。但是,加载文件的顺序和使用哪些文件是不同的。这真是让人烦透了。 - Rorschach
1
或者walyand使用.bash_profile,而你不需要.profile?如果我没记错的话,初始化文件与x11不同。 - Rorschach

1
你可以使用exec-path-from-shell,这将加载所有的shell变量,就像你从终端启动emacs一样。
或者你可以手动添加它们。例如:
(defun aza-latex-path ()
  (setenv "PATH" (concat "/usr/local/texlive/2018/bin/x86_64-linux:"
                         (getenv "PATH")))
  (add-to-list 'exec-path "/usr/local/texlive/2018/bin/x86_64-linux"))

(defun aza-go-path ()
  (setenv "PATH" (concat "/usr/local/go/bin:"
                         (getenv "PATH")))
  (add-to-list 'exec-path "/usr/local/go/bin"))

我知道。"正确"的设置应该是将任何需要被图形应用程序使用的环境变量放在.profile中。可惜我的Debian(使用LightDM)没有识别它。xsessionrc也没有起作用。所以我使用了上面的方法,或者使用exec-path-from-shell - azzamsa
是的,确定在哪里定义它们可能有些棘手。在Gnome3上,我必须确保没有/.bash_profile文件,以便在登录时可以加载/.profile文件。 - Rorschach

0

我写了关于这个的教程。exec-path-from-shell可以显著提高Emacs的启动时间。我更喜欢Doom Emacs的方法:将Shell环境保存到文件中,并在Emacs启动时加载它。我的文章展示了如何实现。


https://meta.stackexchange.com/a/8259/997587 - starball

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