Remote-SSH环境变量加载异常处理
编辑异常发生的背景
在路径etc/profile.d/ 中新增自定义脚本,使用VS Code连接时脚本中的内容并没有初始化。
proxy.sh 代理开关
#!/usr/bin/env bash
proxy_on () {
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export ftp_proxy=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
export ALL_PROXY=http://127.0.0.1:7890
}
proxy_off () {
unset http_proxy
unset https_proxy
unset ftp_proxy
unset HTTP_PROXY
unset ALL_PROXY
}env.sh 开发环境变量
#!/usr/bin/env bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export HIVE_HOME=/opt/hive
export PATH=$PATH:$HIVE_HOME/bin使用terminal登录服务器时脚本内容可以被正常初始化,环境变量和函数都可以正常调用。
使用VS Code连接后脚本中初始化的内容都无法被找到。
解决过程
尝试解决问题
/etc/profile是在login shell启动时自动加载的,尝试在VS Code连接时增加-l 参数,显式使用login shell进行登录。
产生新问题,自定义脚本内容可以正常加载,但是code命令找不到了,无法使用code命令从命令行打开文件。
对比问题环境差异
对比两种启动shell观察发现,可以使用code命令是因为PATH变量中添加.vscode-server目录中的bin目录,强制重新加载profile之后.vscode-server目录中的内容就消失了。
判断应该是VS Code在初始化时将自己的工作目录注册到了PATH 变量中,而强制加载/etc/profile 文件使原本的PATH 变量被覆盖,导致找不到code命令。
解决思路
首先明确面临的问题:
需要加载profile文件来加载一些环境变量与函数
加载profile会覆盖
PATH变量中的VS Code路径
现在的问题矛盾点在于加载profile与保持VS Code环境变量的冲突,需要解决的根本问题就是完成profile加载的同时保持VS Code配置的PATH变量路径。
最终解决方案
使用不带-l参数的正常模式连接ssh,保证VS Code路径正确加载到PATH变量中。
修改~/.bashrc 文件添加source /etc/profile 以及前后操作,来合并PATH 变量的内容。
合并方法1:直接将加载前后的PATH变量内容进行拼接,可能会产生一些重复的目录内容
简单合并PATH变量
__OLD_PATH="$PATH" source /etc/profile PATH="$__OLD_PATH:$PATH" export PATH unset __OLD_PATH合并方法2:强迫症可以对两个变量中的路径去重后重新拼接,并保持路径的先后顺序
强迫症合并PATH变量
# 保存旧变量内容 __OLD_PATH="$PATH" # 强制加载profile source /etc/profile # 分割前后路径列表 IFS=':' read -ra __old <<< "$__OLD_PATH" IFS=':' read -ra __new <<< "$PATH" # 路径去重后放到__merged中 __merged=() for p in "${__old[@]}" "${__new[@]}"; do case ":${__merged[*]}:" in *":$p:"*) ;; *) __merged+=("$p") ;; esac done # 拼接新PATH内容 PATH="$(IFS=:; echo "${__merged[*]}")" export PATH # 注销无用的变量 unset __OLD_PATH __old __new __merged
- 0
- 0
-
分享