Windows怎么运行Linux的.sh脚本,是很多刚开始接触 Linux、服务器和开发环境的用户都会遇到的问题。.sh 文件本质上是 Shell 脚本,通常用于 Linux、Unix 等系统中执行一系列命令,例如安装软件、配置环境、部署网站、启动服务或者批量处理文件。由于 Windows 默认使用 CMD 或 PowerShell,并没有直接提供 Linux Shell 运行环境,因此双击 .sh 文件通常无法正常执行。不过,这并不意味着 Windows 不能运行 Linux 的 .sh 脚本,通过 Git Bash、WSL、虚拟机以及其他兼容环境,都可以在 Windows 中执行 Shell 脚本。对于普通用户来说,选择哪一种方法主要取决于脚本本身的复杂程度,以及脚本是否依赖 Linux 内核、Linux 文件系统或者特定的软件包。
很多人第一次拿到一个 install.sh、setup.sh 或者 run.sh 文件时,会直接在 Windows 文件管理器中双击,结果可能弹出“选择打开方式”,或者使用文本编辑器打开脚本。这是正常现象,因为 Windows 不会把 .sh 自动识别成可以直接执行的程序。更重要的是,Shell 脚本并不是一种独立的可执行程序,它需要由 Bash、sh、zsh 等 Shell 解释器读取并执行。也就是说,Windows运行Linux的.sh脚本的核心并不是简单地找到一个“打开方式”,而是在 Windows 中准备一个能够理解 Linux Shell 命令的运行环境。
一、Windows为什么不能直接运行.sh脚本
.sh 是 Shell Script 的文件扩展名,最常见的是 Bash Shell 脚本。Linux 中执行脚本时,通常会由 Bash 或其他 Shell 解释器负责解析。例如一个非常简单的脚本可能只有下面几行:
#!/bin/bash
echo "Hello Linux"
pwd
ls
在 Linux 系统中,可以通过 bash test.sh 执行,也可以在脚本具有执行权限的情况下使用 ./test.sh。其中第一行 #!/bin/bash 被称为 Shebang,它告诉系统应该使用哪个解释器处理后面的内容。
而 Windows 的 CMD 并不能理解 #!/bin/bash、echo、pwd、ls、chmod、grep、sed 等 Linux Shell 环境中的命令。PowerShell 虽然功能比 CMD 强大很多,也能够执行大量自动化任务,但它同样不是 Bash 环境,因此不能保证 Linux Shell 脚本能够直接运行。
这也是为什么“把 .sh 文件改成 .exe”或者“直接双击 .sh 文件”通常没有意义。文件扩展名只是告诉系统如何关联文件,并不能改变脚本内部使用的命令和解释器。如果一个脚本依赖 Linux 环境,那么即使把文件名改成其他后缀,脚本内容仍然是 Linux Shell 语法。
二、方法一:使用WSL运行.sh脚本
如果希望在 Windows 中运行 Linux 的 .sh 脚本,最推荐的方法之一是使用 WSL,也就是 Windows Subsystem for Linux。WSL 可以让 Windows 用户直接使用 Linux 用户空间环境,不需要像传统虚拟机一样完整安装一个 Linux 虚拟机,因此特别适合运行 Linux 命令、Shell 脚本、开发工具和服务器部署脚本。
在较新的 Windows 版本中,可以使用管理员权限打开 PowerShell,然后执行:
wsl --install
安装完成以后按照系统提示重启电脑。首次启动 Linux 发行版时,需要设置 Linux 用户名和密码。完成以后,就可以进入一个真正的 Linux Shell 环境。
例如创建一个测试脚本:
nano test.sh
输入:
#!/bin/bash
echo "Hello from Linux"
echo "Current directory:"
pwd
保存以后,可以直接使用 Bash 执行:
bash test.sh
如果希望像 Linux 服务器上一样使用 ./test.sh 执行,则通常需要给脚本增加执行权限:
chmod +x test.sh
然后:
./test.sh
这种方式最大的优势是兼容性比较好。很多原本为 Ubuntu、Debian 等 Linux 环境编写的安装脚本,在 WSL 中可以直接运行。不过需要注意,WSL 并不是万能的。如果脚本需要操作真实 Linux 内核模块、启动某些 systemd 服务、访问特殊硬件或者依赖特定服务器环境,那么即使在 WSL 中也可能需要额外调整。
三、Windows中的.sh文件如何在WSL中找到
很多用户安装 WSL 后会遇到另一个问题:.sh 文件明明在 Windows 桌面上,进入 Ubuntu 后却找不到。
实际上,WSL 可以访问 Windows 的磁盘。一般情况下,Windows 的 C 盘会挂载到:
/mnt/c
例如 Windows 用户把脚本放到了桌面:
C:\Users\用户名\Desktop\test.sh
那么在 WSL 中通常可以进入:
cd /mnt/c/Users/用户名/Desktop
然后查看:
ls
如果能够看到 test.sh,就可以执行:
bash test.sh
也可以直接:
chmod +x test.sh
./test.sh
不过,如果脚本比较复杂,建议将脚本复制到 WSL 自己的 Linux 文件系统中再运行。原因是 Windows 文件系统与 Linux 文件系统在权限、符号链接、文件名大小写以及文件性能方面存在一些差异。对于简单脚本,这些问题通常不会造成影响,但对于 Node.js、Python、Docker、编译工具或者大量文件操作项目,放在 Linux 文件系统中往往更加稳定。
例如:
cp /mnt/c/Users/用户名/Desktop/test.sh ~/
cd ~
chmod +x test.sh
./test.sh
这样脚本就被复制到了当前 Linux 用户的 Home 目录。
四、方法二:使用Git Bash运行.sh脚本
如果只是需要运行一些比较简单的 Shell 脚本,而不希望安装完整的 WSL,那么 Git Bash 是另一个非常方便的选择。
Git Bash 随 Git for Windows 一起提供,安装之后可以在 Windows 中获得一个类似 Bash 的命令行环境。对于使用 Git 的开发者来说,Git Bash 本身也非常常见,因此如果你的 .sh 脚本只使用 echo、cd、ls、cp、mv、grep 等基础命令,Git Bash 往往已经够用。
安装 Git for Windows 后,可以在包含脚本的文件夹空白位置点击鼠标右键,选择使用 Git Bash 打开。然后执行:
bash test.sh
如果脚本有执行权限,也可以尝试:
./test.sh
对于简单的 Shell 脚本,Git Bash 的使用体验比较接近 Linux。但它与真正的 Linux 环境还是有区别。Git Bash 主要提供的是一套 Unix 工具和 Bash 环境,并不是完整的 Linux 系统。例如某些脚本里面如果存在:
apt install
systemctl restart nginx
service nginx restart
ip addr
那么 Git Bash 通常不能像 Ubuntu 那样直接处理这些命令。
因此,如果脚本来自 Linux VPS、Ubuntu 服务器或者 Debian 服务器,并且里面涉及安装软件、修改系统配置、启动服务,那么优先考虑 WSL,而不是仅仅依赖 Git Bash。
五、方法三:使用PowerShell调用bash
如果电脑已经安装了 WSL,那么也可以直接在 Windows PowerShell 中调用 Bash。
例如当前目录存在:
test.sh
可以尝试:
wsl bash ./test.sh
或者:
wsl bash /mnt/c/Users/用户名/Desktop/test.sh
这种方式适合需要从 Windows 自动化流程中调用 Linux Shell 脚本的情况。例如某些开发项目可能需要 Windows 负责界面、编辑器和其他工具,而脚本执行交给 WSL 完成。
还可以使用:
wsl
直接进入 Linux 环境,然后再执行:
bash test.sh
对于经常处理服务器脚本的人来说,这种方式非常实用,因为不需要在 Windows 和 Linux 两套机器之间频繁切换。
六、方法四:在虚拟机中安装Linux
如果 .sh 脚本不仅仅是普通的 Shell 命令,而是需要比较完整的 Linux 系统环境,那么使用虚拟机也是一种可靠的方法。
可以在 Windows 上安装 VMware、VirtualBox 等虚拟化软件,然后创建 Ubuntu、Debian、CentOS 或其他 Linux 虚拟机。在虚拟机里面运行:
bash test.sh
或者:
chmod +x test.sh
./test.sh
虚拟机与 WSL 相比更加独立。它拥有自己的虚拟硬盘、网络环境、Linux 内核和系统服务,因此一些需要 systemd、网络服务或者完整 Linux 系统环境的脚本,在虚拟机中通常更容易按照原作者设计的方式运行。
缺点也很明显,就是资源占用更高。虚拟机需要分配内存、CPU、磁盘空间,同时启动和关闭速度也比 WSL 慢。如果只是偶尔执行一个几百行的 .sh 脚本,专门开虚拟机往往没有必要;如果是在 Windows 上长期搭建 Linux 测试环境,那么虚拟机就比较合适。

七、Windows运行.sh脚本最常用的命令
掌握几个基本命令后,Windows 用户在 WSL 或 Git Bash 中运行 Shell 脚本就会简单很多。
最直接的方法:
bash script.sh
也可以使用:
sh script.sh
如果脚本指定了 Bash,并且使用了 Bash 特有语法,那么建议使用:
bash script.sh
而不是:
sh script.sh
例如脚本中使用数组、[[ ]]、某些 Bash 参数展开方式等语法时,使用 sh 可能出现错误。
如果脚本具有执行权限,可以:
./script.sh
如果出现:
Permission denied
可以执行:
chmod +x script.sh
然后再次运行:
./script.sh
如果出现:
command not found
则不要急着认为 .sh 文件损坏。更常见的原因是脚本依赖的程序没有安装,或者 Windows 当前环境根本不存在这个 Linux 命令。
八、Windows运行.sh脚本出现乱码怎么办
Windows 和 Linux 对文本文件换行符的处理方式存在差异,这也是 Shell 脚本从 Windows 下载、编辑后,在 Linux 环境执行时比较常见的问题。
Linux 通常使用 LF 换行,而传统 Windows 文本文件经常使用 CRLF 换行。如果一个 .sh 文件被 Windows 编辑器修改成 CRLF 格式,在 Linux 中执行时可能出现类似:
/usr/bin/env: 'bash\r': No such file or directory
或者:
command not found
这种问题看起来很奇怪,因为明明文件里写的是正确的命令,Linux 却提示找不到。
可以使用 dos2unix 转换:
dos2unix script.sh
如果系统没有安装,可以先安装:
sudo apt update
sudo apt install dos2unix
然后:
dos2unix script.sh
bash script.sh
如果不想安装额外工具,也可以使用其他方式处理 CRLF,但对于普通用户来说,安装 dos2unix 是比较直接的解决办法。
使用 VS Code 编辑 Shell 脚本时,也可以注意编辑器底部的换行格式。如果显示 CRLF,可以切换为 LF 后再保存。这样能够减少脚本在 Windows 和 Linux 环境之间来回传输时出现的问题。
九、Windows运行Linux脚本前需要检查哪些内容
拿到一个 .sh 脚本后,不建议一上来就直接执行,特别是从网络下载或者别人发送过来的脚本。Shell 脚本的权限非常高,一个脚本里面可以包含删除文件、安装软件、修改系统配置、创建用户、下载远程程序等操作。因此,在执行之前先打开脚本检查内容是非常有必要的。
可以使用:
cat script.sh
或者:
less script.sh
重点看看有没有类似:
rm -rf
curl
wget
chmod
sudo
apt install
systemctl
这些命令本身并不意味着脚本有问题,它们都是 Linux 管理中常见的命令,但需要知道脚本到底准备执行什么操作。
如果脚本来自服务器厂商、开源项目或者自己编写的项目,可以结合脚本用途进行判断。例如一个 Nginx 安装脚本出现 apt install nginx 是比较正常的,而一个单纯修改 DNS 的脚本突然删除整个目录,就应该提高警惕。
另外还需要查看脚本依赖。例如:
which bash
which curl
which wget
which git
如果脚本依赖某个程序,而当前环境没有安装,那么执行过程中自然会失败。
十、为什么有些.sh脚本在Windows上还是运行不了
即使已经安装 WSL,也不能保证所有 .sh 脚本都可以直接运行。原因在于 .sh 只是一种脚本文件格式,并不代表脚本一定具有跨 Linux 发行版运行的能力。
例如:
apt install nginx
这是明显针对 Debian/Ubuntu 系系统的写法。如果在 CentOS、Rocky Linux 等发行版中执行,可能就不适用。
再比如:
yum install nginx
则更加偏向 RHEL 系发行版。
还有一些脚本可能使用:
systemctl restart nginx
这要求当前系统具有相应的 systemd 服务环境。如果在某些精简容器、特殊 WSL 配置或者 Git Bash 中执行,就可能无法正常工作。
还有一些脚本依赖特定目录,例如:
/etc/nginx/
或者:
/var/www/html/
这些目录在 Windows 中并不存在,在 Git Bash 中也不一定有对应的真实 Linux 系统结构。
因此,判断一个 .sh 脚本能否在 Windows 上运行,不能只看文件后缀,还要看脚本实际调用了什么命令。
十一、Windows执行.sh脚本的推荐选择
如果只是偶尔运行一个简单的 Shell 脚本,Git Bash 是比较轻量的选择;如果经常使用 Linux 命令、开发环境或者需要运行 Ubuntu/Debian 脚本,WSL 更值得推荐;如果需要完整 Linux 系统、systemd、独立网络和长期测试环境,那么虚拟机更加合适。
简单来说,可以按照下面的思路选择:
| 使用场景 | 推荐方式 | 难度 | 适合程度 |
|---|---|---|---|
| 简单Shell脚本 | Git Bash | 低 | ★★★★☆ |
| Ubuntu脚本 | WSL | 低 | ★★★★★ |
| Linux开发环境 | WSL | 中 | ★★★★★ |
| 服务器部署脚本 | WSL/虚拟机 | 中 | ★★★★★ |
| 需要完整Linux系统 | 虚拟机 | 中 | ★★★★☆ |
| systemd等系统服务测试 | Linux虚拟机 | 中 | ★★★★★ |
| 只想执行几个Linux命令 | Git Bash | 低 | ★★★★★ |
从实际使用角度来看,如果你的主要电脑是 Windows,但经常需要管理 Linux VPS、编写 Shell 脚本或者部署网站,WSL 通常是比较均衡的方案。它不会像传统虚拟机一样占用大量系统资源,同时又能够提供比 Git Bash 更完整的 Linux 使用体验。
十二、常见问题解答
Windows可以直接双击.sh文件吗?
一般不能像 .exe 那样直接双击执行。.sh 文件需要 Shell 解释器处理,可以通过 WSL、Git Bash 或 Linux 虚拟机执行。对于普通 Linux 脚本,最常见的方式是进入 WSL 后执行 bash script.sh。
Windows运行.sh脚本一定要安装Linux吗?
不一定。如果只是简单 Shell 命令,可以使用 Git Bash;如果脚本需要比较完整的 Linux 用户空间环境,可以使用 WSL。只有在脚本依赖完整 Linux 系统功能时,才更适合使用虚拟机或真实 Linux 服务器。
为什么bash script.sh可以运行,但./script.sh不能运行?
最常见原因是脚本没有执行权限。可以使用:
chmod +x script.sh
然后再执行:
./script.sh
如果仍然无法运行,还需要检查第一行 Shebang、换行格式以及脚本本身是否存在语法问题。
Windows运行.sh脚本最推荐哪种方法?
如果你的目标是运行 Linux 服务器上的安装脚本、部署脚本或者日常 Shell 工具,优先推荐 WSL。它比单纯使用 Git Bash 更接近真实 Linux 环境,同时又不需要像虚拟机一样维护完整的 Linux 桌面系统。
十三、总结
Windows怎么运行Linux的.sh脚本,关键并不是修改文件后缀,而是为 Shell 脚本提供合适的解释器和运行环境。简单脚本可以使用 Git Bash,涉及 Ubuntu、Debian 或服务器环境的脚本更适合使用 WSL,而需要完整 Linux 内核和系统服务的测试,则可以考虑虚拟机。
对于大多数 Windows 用户而言,WSL 是目前比较实用的解决方案。安装完成后,只需要进入脚本所在目录,然后执行 bash script.sh,基本就可以完成大多数常见 Shell 脚本的运行。如果需要直接执行,则使用 chmod +x script.sh 添加权限,再通过 ./script.sh 启动。
不过,在运行陌生 .sh 文件之前,最好先查看脚本内容,确认它需要执行的命令和修改的文件范围。尤其是带有 sudo、rm、curl、wget、系统服务配置等操作的脚本,更应该先确认来源和用途。对于服务器运维来说,能运行脚本只是第一步,了解脚本到底做了什么,才是更重要的安全习惯。

djvps820







