如何在VSCode远程SSH集成终端修改PATH且不覆盖VSCode注入路径
问题描述
我使用VSCode Remote SSH功能在远程Linux服务器上开发。VSCode的该特性会在集成终端的$PATH中注入一条特殊路径,让我能通过code命令在当前VSCode会话里打开文件。示例如下:
[user@server my-workspace]$ echo "$PATH" /nethome/user/.vscode-server/bin/6261075646f055b99068d3688932416f2346dd3b/bin/remote-cli:/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/opt/puppetlabs/bin:/tools/matlab/r2019a/bin:/usr/apps/bin:/nethome/user/bin:/usr/local/sbin:/usr/sbin:/tools/matlab/r2019a/bin:/usr/apps/bin:/nethome/user/bin:/nethome/user/bin:/tools/matlab/r2019a/bin:/usr/apps/bin:/nethome/user/bin [user@server my-workspace]$ which code /nethome/user/.vscode-server/bin/6261075646f055b99068d3688932416f2346dd3b/bin/remote-cli/code [user@server my-workspace]$ code README.md [user@server my-workspace]$ # README.md 现在已在当前VSCode会话中打开
我希望把工作区内的build/bin目录添加到$PATH开头,于是在工作区创建了.vscode/settings.json,内容如下:
{ "terminal.integrated.env.linux": { "PATH": "${workspaceFolder}/build/bin:${env:PATH}" } }
但这个配置会覆盖VSCode注入的特殊路径,导致code命令无法找到:
[user@server my-workspace]$ echo "$PATH" /nethome/user/my-workspace/build/bin:/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/opt/puppetlabs/bin:/tools/matlab/r2019a/bin:/usr/apps/bin:/nethome/user/bin:/tools/matlab/r2019a/bin:/usr/apps/bin:/nethome/user/bin [user@server my-workspace]$ which code /usr/bin/which: no code in (/nethome/user/my-workspace/build/bin:/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/opt/puppetlabs/bin:/tools/matlab/r2019a/bin:/usr/apps/bin:/nethome/user/bin:/tools/matlab/r2019a/bin:/usr/apps/bin:/nethome/user/bin) [user@server my-workspace]$ code README.md bash: code: command not found...
请问有没有办法在集成终端中将自定义路径添加到$PATH开头,同时保留VSCode注入的.../bin/remote-cli路径?
解决方案
以下是几种可行的解决方法:
方法1:通过终端启动脚本修改PATH
不在VSCode设置中直接覆盖PATH,而是通过shell初始化脚本添加自定义路径,同时保留VSCode注入的路径。
如果只想在当前工作区生效:
- 在工作区根目录创建
.workspace-path.sh脚本,内容如下:
export PATH="${PWD}/build/bin:$PATH"
- 修改
.vscode/settings.json,配置终端启动时加载该脚本:
{ "terminal.integrated.profiles.linux": { "bash": { "path": "bash", "args": ["-c", "source ${workspaceFolder}/.workspace-path.sh && exec bash"] } }, "terminal.integrated.defaultProfile.linux": "bash" }
VSCode会先注入remote-cli路径,再通过脚本把自定义路径加到$PATH开头,两者都能保留。
方法2:利用VSCode内置变量配置PATH
VSCode提供了${env:VSCODE_CLI}变量,自动指向code命令所在的remote-cli目录。直接在设置中包含该路径即可:
{ "terminal.integrated.env.linux": { "PATH": "${workspaceFolder}/build/bin:${env:VSCODE_CLI}:${env:PATH}" } }
这样自定义路径在最前,接着是VSCode的特殊路径,最后是系统原有PATH,既满足自定义需求,又能正常使用code命令。
方法3:工作区专属shell配置
如果使用bash,可通过工作区本地配置实现:
- 在工作区根目录创建
.bashrc.local,内容:
export PATH="${PWD}/build/bin:$PATH"
- 在主目录的
~/.bashrc末尾添加:
if [ -f "${PWD}/.bashrc.local" ]; then source "${PWD}/.bashrc.local" fi
进入工作区打开终端时,会自动加载工作区的路径配置,同时不影响VSCode注入的路径。
内容的提问来源于stack exchange,提问作者ArkaneMoose
相关产品推荐
相关产品推荐

