远程执行脚本前必须确认vscode已通过ssh连接目标机器,否则命令在本地运行;连接后需验证hostname、路径、文件同步及执行权限,推荐用bash script.sh而非./script.sh,并用set -x或echo调试。

远程执行脚本前必须确认终端已连接到目标机器
VSCode 本身不“调用”远程脚本,它只提供编辑和终端界面;真正执行脚本的是你连接进去的远程 shell。如果右下角状态栏没显示 SSH: user@host 或类似标识,说明还没连上——此时所有命令都在本地跑,./deploy.sh 肯定找不到、bash deploy.sh 也只会报 No such file or directory。
验证方式:按 Ctrl+` 打开集成终端,输入 hostname,输出应为远程主机名,不是你本地机器名。
- 没连上?点击左下角绿色按钮 “Open SSH Connection”,选已配置的主机;或手动运行
ssh user@ip - 连上了但路径不对?用
cd /path/to/script切到脚本所在目录,再操作 - 脚本在远程,但你在本地编辑保存后没同步?Remote - SSH 默认实时同步,但若用了
scp或挂载方式上传,需确认文件确实已落盘
直接在远程终端里用 bash 执行最可靠
别依赖 Code Runner 点一下就跑,尤其当脚本含 [[ ]]、source、数组或 $(( )) 时,/bin/sh 会静默失败或报 line 5: [[: not found。最稳的方式是:在已连接的集成终端里,明确敲 bash script.sh。
- 优点:绕过 shebang 解析、权限检查、PATH 查找三重干扰
- 不用
chmod +x——bash script.sh不依赖执行位 - 能立刻看到错误,比如
source: not found就说明远程 shell 是 dash 或 ash,不是 bash - 若脚本依赖
~/.bashrc里的函数或 alias,加一句source ~/.bashrc && bash script.sh
用 ./script.sh 方式必须满足三个硬条件
想用 ./script.sh(即“当作可执行文件运行”),远程机器上必须同时满足:
-
#!/usr/bin/env bash是文件第一行,前面不能有空格、BOM、注释(用head -n1 script.sh | cat -A检查) - 执行
chmod +x ./script.sh—— VSCode 不会自动帮你加,连上 SSH 后必须手动敲 - 当前工作目录就是脚本所在目录,且路径以
./开头(写script.sh会被当成命令搜索,不是文件执行)
缺任一环都会报 Permission denied 或 command not found,而且错误信息完全一样,容易误判。
调试远程 Shell 脚本别指望 F5 断点
VSCode 官方不支持 Bash 原生调试,bashdb 插件在多数远程环境(尤其是 Alpine、CentOS Stream、最小化 Docker 镜像)根本装不上,Cannot find debugger bashdb 是常态。
真实有效的调试手段只有两个:
- 加
set -x在脚本开头,让每条命令执行前打印出来:bash -x script.sh - 把关键变量用
echo "DEBUG var=$var"打出来,配合bash script.sh 2>&1 | grep DEBUG过滤
远程调试最易被忽略的一点:脚本里写的相对路径(如 ../conf/config.ini)在你本地 pwd 和远程 pwd 不一致时,行为完全不同——务必在远程终端里先 pwd 确认当前路径,再测试。











