上次我们提到了VSCode Remote的环境变量加载是在第一次远程服务器启动Remote Server(node启动)时。如果修改了环境变量想要重新加载,需要重新开启VSCode Remote的远程服务。
但是我后来遇到了一个问题,VSCode Remote始终没有加载我在.bashrc
里添加的环境变量,但是在VSCode中打开的终端的环境变量却没有问题,这是为什么呢?
经过一番研究,终于发现,问题的根源在于VSCode Remote在登录远程服务器时,使用的是Interactive login的方式,这种方式会加载/etc/profile
、~/.bash_profile
/ ~/.bash_login
/ ~/.profile
,默认并不会加载~/.bashrc
,因此我们在~/.bashrc
中设置的环境变量也就不会在VSCode Remote中生效了。不过VSCode中打开终端时使用的是Interactive non-login方式,就会读取~/.bashrc
,且在登录终端之前会将VSCode Remote启动时的环境变量继承到终端中。
再来说回我们遇到的问题,通常来说,用户目录下的~/.profile
文件中会有执行~/.bashrc
文件的语句,这是也我之前从来没注意这个问题但是也可以正常使用的原因。但是公司新的海外开发机并没有从/etc/skel
目录复制.bash_logout
、.bashrc
、.profile
等三个文件,于是我自己创建了个.bashrc
写一些环境变量,但由于没有~/.profile
帮我执行~/.bashrc
,环境变量自然也就不生效了。
另外,由于默认的~/.profile
文件会执行~/.bashrc
,且VSCode在打开终端时会将之前的环境变量继承,则在打开终端时会发现所有以“添加”形式设置的环境变量里面的内容会出现两次。
PS: 我是在配Go环境的时候遇到的这个问题,VSCode报错:
Failed to run "go env" to find GOPATH as the "go" binary cannot be found in either GOROOT(xxxxx) or PATH(/home/fz/.vscode-server/bin/f359dd69833dd8800b54d458f6d37ab7c78dfxxx/bin......)
附:
环境变量加载顺序:
https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/
+----------------+-----------+-----------+------+
| |Interactive|Interactive|Script|
| |login |non-login | |
+----------------+-----------+-----------+------+
|/etc/profile | A | | |
+----------------+-----------+-----------+------+
|/etc/bash.bashrc| | A | |
+----------------+-----------+-----------+------+
|~/.bashrc | | B | |
+----------------+-----------+-----------+------+
|~/.bash_profile | B1 | | |
+----------------+-----------+-----------+------+
|~/.bash_login | B2 | | |
+----------------+-----------+-----------+------+
|~/.profile | B3 | | |
+----------------+-----------+-----------+------+
|BASH_ENV | | | A |
+----------------+-----------+-----------+------+
| | | | |
+----------------+-----------+-----------+------+
| | | | |
+----------------+-----------+-----------+------+
|~/.bash_logout | C | | |
+----------------+-----------+-----------+------+
shell登录方式的区别:
VSCode Remote对环境变量加载的一些解释:
https://github.com/microsoft/vscode-remote-release/issues/83
Comments
注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。