vscode远程脚本执行时cwd必须明确设置,terminal.integrated.cwd控制终端初始路径(需重启终端生效),launch.json中cwd控制调试器路径,二者完全解耦;远程场景下应使用${workspacefolder}确保路径映射正确。

VSCode 执行远程脚本时,cwd(当前工作目录)必须明确指向你期望脚本运行的上下文路径,否则 import、open()、相对路径配置等都会出错——这不是“脚本写错了”,而是 VSCode 根本没在你想的位置启动它。
terminal.integrated.cwd 决定终端初始路径,但只对新建终端生效
这个设置是控制集成终端起始位置的唯一可靠入口。它不修改已有终端,也不影响调试器或任务运行器——那些得另配。
- 改完
terminal.integrated.cwd后,必须关闭当前终端(点垃圾桶图标),再点+新建一个,才生效 - 填
"${workspaceFolder}"是最稳的选择:只要你是通过 File → Open Folder 打开项目根目录的,它就能展开为绝对路径 - 填
"${fileDirname}"无效——终端启动时还没选中任何文件,变量取不到值,最终 fallback 到用户主目录 - Windows 用户写路径时用正斜杠
/,比如"C:/my-project";双反斜杠\也行,但漏写一个就导致 JSON 解析失败
launch.json 里的 cwd 控制调试器行为,和终端无关
如果你用 F5 调试 Python/Node.js 等脚本,launch.json 中的 cwd 字段才真正决定脚本执行时的 process.cwd()。它和终端路径完全解耦。
- 示例配置:
"cwd": "${workspaceFolder}/src"—— 脚本会在src/子目录下启动,./data/config.json就会从这里开始解析 - 多根工作区下,
${workspaceFolder}指的是「当前活动的」那个根,不是所有根的拼接 -
program和cwd可以不同:比如program指向./scripts/deploy.py,而cwd设为"${workspaceFolder}",这样脚本里读./config.yaml就能命中项目根下的文件
远程脚本执行依赖 SSH 或容器环境,cwd 需配合远程路径语义
VSCode Remote-SSH 或 Dev Containers 下,terminal.integrated.cwd 的值仍会被发送过去,但它必须是远程机器上真实存在的路径。
- 不要写本地路径如
"C:/project"或"/Users/me/project",远程 shell 根本不认识 - 推荐写
"${workspaceFolder}":VSCode 会自动把本地工作区路径映射为远程对应路径(前提是 Remote-SSH 已成功连接并挂载) - 如果远程项目结构和本地不一致(比如代码被复制到
/opt/app),就得在远程机器的.vscode/settings.json里单独设"terminal.integrated.cwd": "/opt/app" - Git Bash 用户注意:它的启动参数可能带
--cd-to-home,会强行覆盖 VSCode 设置,需检查 Git 安装目录下的git-bash.exe属性或快捷方式目标
最容易被忽略的一点:VSCode 不会“自动同步”终端路径和调试路径。你可能在终端里 cd 到了 src/,但 F5 调试时依然从根目录启动——因为 launch.json 没配 cwd,或者配的是默认值。两个地方得各自确认。











