windows运行shell脚本
Windows 上跑 shell 脚本?脚本很多人第一反应是“那玩意儿不是 Linux 的东西吗?”——对,也不对。脚本Windows 10 之后系统里其实自带了一个完整的脚本 Linux 子系统(WSL),装上就能直接跑 bash、脚本python、脚本docker 那套生态。脚本但如果你不想装子系统,脚本或者只是脚本临时想跑个几百行的 .sh 文件,也有更轻量的脚本路子。
先说最直接的脚本笨办法:把 Git 装上去。Git for Windows 会附带一个叫 Git Bash 的脚本终端,这玩意儿本质是脚本一个模拟的 Unix 环境,里面能看到 /usr/bin、脚本/etc 这些目录,脚本ls、脚本grep、awk 这些命令基本都有。你双击打开 Git Bash,把脚本拖进窗口,敲个 `bash 你的脚本.sh` 就能跑。很多开发者没意识到,他们电脑里早就装了 Git,却还去搜“Windows 怎么运行 Linux 命令”——浪费了现成的工具。
但 Git Bash 有个坑:它模拟出来的环境不完整。比如你用 `curl` 下载文件,有时候会遇到证书路径的问题;用 `sed -i` 直接改文件,在 Windows 换行符(CRLF)和 Linux 换行符(LF)之间来回横跳,能把脚本搞出诡异的报错。这时候你得在脚本开头加一行 `export SHELLOPTS` 或者干脆用 `dos2unix` 转换一下格式。说实话,这种折腾对新手不太友好,但对老手来说反而多了些掌控感。
真正省心的方案,是启用 WSL。微软这几年把 WSL 做得越来越顺滑,从 WSL1 到 WSL2,文件系统性能提升了不少。你只需要在 PowerShell 里敲一句 `wsl --install`,重启一次电脑,就能在开始菜单里看到 Ubuntu 的图标。进去之后,那是一个完整的 Linux 内核,你可以在里面装任何东西——包括把整个 Linux 服务器环境跑起来。WSL 和 Windows 文件系统是互通的,你可以在 Windows 的 C 盘里写脚本,然后到 WSL 里用 `cd /mnt/c/...` 来访问它。
不过 WSL 也有个反直觉的地方:它默认把 Windows 的 PATH 环境变量混进来。这意味着你在 WSL 里敲 `notepad.exe` 能直接打开 Windows 记事本,听起来方便,但有时候会引发冲突。比如你装了 Python,Windows 上有个版本,WSL 里也有个版本,脚本里写 `python` 到底调用哪个?不一定。我遇到过脚本跑着跑着突然弹出一个 Windows 窗口,因为某行命令调用了 `explorer.exe`——这让我哭笑不得。
如果你连 Git 都不想装,Windows 自带的 PowerShell 其实也能处理。PowerShell 可以直接执行 `.sh` 文件里的内容,前提是你要用 `Get-Content` 读取,然后用 `Invoke-Expression` 去执行每一行。但这种方式只适合简单脚本,遇到复杂的正则、管道、进程控制就废了。更推荐的做法是:在 PowerShell 里调用 `bash` 命令——前提是你已经装了 WSL 或者 Git Bash,然后像 `bash -c "你的命令"` 这样混着用。
最后说个经验:别小看 Windows 上跑脚本这件事。我见过不少团队,服务器是 Linux,但开发机是 Windows,结果每次部署都要把脚本在本地测一遍,再传到服务器上,来回改格式,浪费大把时间。现在有了 WSL,直接在本地模拟生产环境,跑通了再上传,效率翻倍。但如果你只是偶尔跑一次脚本,别去折腾 WSL,装个 Git Bash 就够用了——别让工具本身成为负担。
本文地址:http://www.79wt.cn/news/1721a199826.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。