Windows10下Shell脚本执行mvn命令无输出问题排查求助
解决Windows 10下Shell脚本无输出的问题
别着急,咱们一步步排查你遇到的这个问题——运行abcd.sh时既看不到Maven的执行反馈,也没打印出TESTING,大概率是Windows和Unix Shell环境的兼容细节出了问题,下面是具体的排查和解决步骤:
1. 先修正脚本的换行符格式
Windows默认用CRLF(回车+换行)作为换行符,但Unix/Linux风格的Shell脚本要求必须用LF(仅换行)。如果你的脚本是用Windows记事本、Word之类的工具写的,几乎肯定是这个问题。
- 解决办法:用VS Code、Notepad++这类编辑器,把文件格式切换成LF:
- VS Code:点击右下角的「CRLF」,选择「LF」即可;
- Notepad++:菜单栏选「编辑」→「文档格式转换」→「转换为UNIX格式」。
2. 给脚本加上Shebang行指定解释器
在abcd.sh的第一行加上这行代码,明确告诉shell用哪个解释器执行脚本,避免Windows下不同shell环境的兼容混乱:
#!/bin/sh
3. 强制捕获所有输出(包括错误信息)
有时候Maven命令可能因为执行出错或者静默模式没输出,咱们可以修改脚本,把错误输出也重定向到标准输出,同时加上执行状态码排查:
修改后的abcd.sh示例:
#!/bin/sh # 把Maven的错误输出和标准输出合并打印 mvn clean install 2>&1 echo "TESTING" # 打印上一条命令的执行状态码,0=成功,非0=失败 echo "Maven执行状态码:$?"
这里的2>&1是关键,它会把原本不会显示的错误信息(比如Maven找不到、依赖报错)也打印出来,帮你定位问题。
4. 检查当前sh环境的Maven配置
Windows下的sh可能来自Git Bash、WSL、Cygwin等不同工具,不同环境的PATH配置不一样:
- 先在sh终端里直接输入
mvn -v,如果能正常输出Maven版本,说明环境没问题;如果报错,就得把Maven的bin目录添加到当前shell的PATH里。
5. 换用bash执行脚本试试
部分环境下sh的兼容性不如bash,你可以试试用bash abcd.sh代替sh abcd.sh执行,看是否能正常输出内容。
6. 确保脚本有执行权限(针对WSL/Git Bash环境)
虽然Windows权限限制没那么严,但如果是WSL或者Git Bash环境,还是要给脚本加执行权限:
chmod +x abcd.sh
之后用./abcd.sh运行脚本试试。
先从换行符和Shebang行这两个Windows写Shell脚本的常见坑查起,基本能解决大部分无输出的问题。
内容的提问来源于stack exchange,提问作者Vivek Agrawal




