今天太让我无语了,这个错误我调了一下午
我的proxy端口换掉了,但是emacs还是用的旧端口,用exec-path-from-shell-initialize
给我跳出来这个
You appear to be setting environment variables ("PATH") in your .bashrc or .zshrc: those files are only read by interactive shells, so you should instead set environment variables in startup files like .profile, .bash_profile or .zshenv. Refer to your shell’s man page for more info. Customize ‘exec-path-from-shell-arguments’ to remove "-i" when done, or disable ‘exec-path-from-shell-check-startup-files’ to disable this message.
那好吧,我就把export http_proxy='http://127.0.0.1:7890'
这条指令在各种profile
,.bashrc
,.zshrc
里写了个遍,都source
过了
到emacs里exec-path-from-shell-copy-env
,然后M-! echo $http_proxy
,还是以前的端口,一点都没改
劳资这个也改了,
(setq url-proxy-services '(
("http" . "http://127.0.0.1:7890")
("https" . "https://127.0.0.1:7890")
("socks" . "socks://127.0.0.1:7891")))
照样木大
最后终于找到了解决方案
(setenv "http_proxy" "http://127.0.0.1:7890")
(setenv "https_proxy" "https://127.0.0.1:7890")
这是怎么回事啊,我下体裂开了啊
1 个赞
cireu
2020 年10 月 22 日 15:32
2
exec-path-from-shell
只负责把shell的PATH
变量导入Emacs的exec-path
变量里
哈哈哈哈,当初GUI界面变量与shell中的变量不同步的时候,我是用exec-path-from-shell
这个函数解决的
LdBeth
2020 年10 月 22 日 23:53
8
exec pfs 只给你同步 PATH 变量,其他变量是不管的,最经济的当然是 setenv
那原来emacs是怎么读取环境变量的,除了setenv
要怎么去修改
VonFry
2020 年10 月 23 日 02:46
10
bashrc, zshrc这些只影响交互环境
如果你想让emacs启动时读到你的环境变量,一般来说要改的是xsession这类。有些发行版可能在图形界面也会去执行bashrc这种,但这不是很标准。一般来说你是不能在运行期修改图形界面运行的那个环境的变量,你开个新的终端只是那个环境的sub。getenv读是读你emacs运行环境的变量,也就是这个图形界面的环境,如前面说的,这个和你的交互环境一般是分开的。除非你emacs是从终端启动的
再一点,你用setenv修改的只是emacs运行的这个subshell环境,也不会影响到parent shell
同步变量值的方法可以参考exec-shell和direnv这种,自己写脚本去开个shell,然后把变量导出来setenv
哦,你用exec-shell的话,他有个配置是可以配置同步哪些变量来的
LdBeth
2020 年10 月 23 日 03:05
11
我在 linux 是直接从 bash 里 startx 的,所以没那么多复杂的要整。
可以像 Spacemacs 那样自动或手动 dump 一份完整的 env,启动时用 load-env-vars 加载这个文件
等需要修改的时候,再重新 dump 或者编辑文件
cireu
2020 年10 月 23 日 04:30
13
环境变量不是一个巨型全局哈希表, 他是进程间独立的
POSIX系统里创建子进程, 先用fork
复制父进程, 然后用exec
运行命令, 替换掉这个被fork出来的进程, exec
命令里可以给重新设定进程的环境变量, 如果不设定则是从父进程复制得来
cireu
2020 年10 月 23 日 04:34
15
你用export
设置命令行shell的环境变量, 然后用图标启动, 点图标是GUI shell进行fork+exec, 自然不会被命令行里shell的环境变量影响.
如何初始化GUI shell的环境变量, 通常是由login manager(就是让你启动输入密码的程序)来决定的, 有的login manager会读取~/.profile
或者 ~/.xprofile
. 但是没有一个统一的标准, 导致不同login manager实现不一样, 这也是Linux桌面一个令人诟病的地方
像 @LdBeth 那样在tty使用startx
, X是在命令行的shell里启动的, shell会用对应的~/.shell_profile
或者 ~/.shellrc
初始化环境变量, 正好让startx
继承了.