使用Javy编译JS为Wasm时执行make download-wasi-sdk报错如何解决
问题背景
使用Javy将JavaScript编译为Wasm时,需要安装wasi-sdk构建依赖,执行make download-wasi-sdk命令下载组件时出现如下报错:
ajit0902@AJITPC:/mnt/c/Users/msi/javy$ make download-wasi-sdk ./install-wasi-sdk.sh /usr/bin/env: ‘bash\r’: No such file or directory make: *** [Makefile:5: download-wasi-sdk] Error 127
报错原因
报错核心是shell脚本使用了Windows系统的CRLF换行符(行尾携带\r回车符)。从执行路径/mnt/c/可判断当前运行环境为WSL,挂载的是Windows磁盘分区,Linux系统解析脚本首行的shebang声明时,会把行尾的\r识别为解释器名称的一部分,尝试查找名为bash\r的可执行文件,系统不存在该文件因此抛出127错误码。
触发该问题的常见场景:
- 克隆仓库时Git开启了自动换行转换,将Linux下的LF换行自动替换为Windows的CRLF换行
- 仓库内的shell脚本曾在Windows编辑器中被修改,保存时默认使用了CRLF换行格式
解决方法
可根据实际场景选择对应方案:
方案1:使用dos2unix批量转换换行符(推荐)
操作步骤:
- WSL环境下先安装dos2unix转换工具,Debian/Ubuntu系执行命令:
sudo apt update && sudo apt install -y dos2unix - 进入Javy仓库根目录,批量转换所有shell脚本的换行格式为Linux兼容的LF格式:
find . -type f -name "*.sh" -exec dos2unix {} \; - 重新执行
make download-wasi-sdk命令即可正常运行。
方案2:调整Git配置后重新拉取代码
如果是Git自动转换换行导致的问题,可修改Git全局配置后重新拉取仓库:
- 执行命令关闭Git自动换行转换:
git config --global core.autocrlf false - 删除本地现有Javy仓库文件夹,重新克隆仓库代码
- 进入新拉取的仓库目录,重新执行
make download-wasi-sdk。
方案3:临时指定解释器执行(应急场景使用)
如果不想批量修改文件,可绕开脚本的shebang解析,直接手动调用bash执行对应脚本:
直接执行bash ./install-wasi-sdk.sh完成wasi-sdk下载,后续执行其他make命令如果再出现同类换行报错,对应转换脚本格式即可。
注意:Javy的构建流程依赖POSIX兼容的shell环境,不要直接在Windows原生CMD、PowerShell中执行构建命令,必须在WSL、原生Linux或macOS环境下操作。
内容的提问来源于stack exchange,提问作者Ajit
相关产品推荐
相关产品推荐

