Emacs到底是从哪里获取的环境变量

我的 login shell 是 bash,我尝试过在.bashrc.bash_profile修改PATH,但(shell-command-to-string "echo $PATH")还是原来的值。


更新

我把下面的env改成bash还是不行,甚至把.desktop里的Exec改成bash -c 'emacs xxx'也不行。。。

xxx是我调整geometry的参数,不影响。

当然,怎么改,从 terminal 启动是可以的,只不过我把修改PATH的语句放到.bash_profile后,terminal 也不行了,不应该吧。。。


补充一下细节,.bash_profile

[[ -f ~/.bashrc ]] && . ~/.bashrc

.bashrc

export PATH=XXX:$PATH

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

# other things...

取决与你启动 Emacs 的方式,比如在 Windows 用快捷方式启动或在 Mac 上从 Spotlight 启动,操作系统不会去执行你的 .bash_profile,也就不可能把其中的环境变量传给 Emacs;但从 Bash 启动,会把其环境变量传给 Emacs。

3 个赞

桌面环境调用的.desktop。。。试了一下,在 terminal 里是可以的。。。

#!/usr/bin/env xdg-open

主贴更新了。

将环境变量放到 /etc/profile 试试,应该有用

我发现各个app launcher的行为都不一样……有的是干脆什么环境变量都不传,有的是只传递系统环境变量(/etc/profile, /etc/zshenv之类的),有的则是什么环境变量都给你传进去……

所以exec-path-from-shell或者Spacemacs造的轮子还是有必要的,至少在非Windows系统下的GUI Emacs中有必要

1 个赞

spacemacs 现在会创建一个.env文件,会读取bash的环境变量

原来是为了解决这种问题, 之前还觉得这文件有点多余呢

1 个赞

为什么要写在一个文件里呢,每次都读一下会有什么问题?我知道如lazycat的帖子所说,一次启动中读取多次会有性能问题,那么存在一个变量里就好了,也仍然不用写在文件里?

为了(首次)启动速度吧,等一两秒挺不爽的。

为了安装后的启动速度。毕竟读个文件还是比执行shell命令要快。

我当时去除exec-path-from-shell之后启动速度能减少200ms……相当可观了。