WSL中存在且有执行权限的bash脚本无法通过绝对路径执行求助
WSL执行Windows磁盘bash脚本提示“No such file or directory”的排查与解决
常见原因及对应解决方法
1. 脚本换行符为Windows格式(CRLF)
Windows下创建的文件默认用CRLF换行,而Linux环境要求LF换行。bash执行时会把shebang行(如#!/bin/bash)识别为#!/bin/bash^M,系统找不到这个不存在的解释器,因此报错“文件不存在”。
解决方法:
- 安装
dos2unix工具转换:sudo apt update && sudo apt install dos2unix dos2unix /mnt/e/path/to/my_script.sh - 用sed命令直接替换换行符:
sed -i 's/\r$//' /mnt/e/path/to/my_script.sh - 在Windows编辑器中修改换行格式(比如VS Code右下角点击“CRLF”切换为“LF”后保存)
2. WSL挂载Windows磁盘时启用了noexec选项
如果WSL挂载Windows分区时带有noexec参数,即使脚本设置了执行权限也无法运行。
解决方法:
- 查看当前挂载参数,执行
mount命令,找到/mnt/e的挂载行,确认是否包含noexec。 - 创建或修改
/etc/wsl.conf文件,添加自动挂载配置:[automount] options = "metadata,umask=0022,fmask=0133,exec" - 重启WSL生效:在Windows命令提示符或PowerShell中执行
wsl --shutdown,再重新打开WSL终端。
3. 脚本shebang行错误
脚本第一行的shebang(解释器路径)写错,导致系统无法找到正确的执行程序。
解决方法:
- 检查脚本第一行是否为
#!/bin/bash,可以用cat -A /mnt/e/path/to/my_script.sh查看行尾是否有异常字符。 - 确认WSL中bash的实际路径:执行
which bash,输出应为/bin/bash,若shebang行路径不符则修改。
内容的提问来源于stack exchange,提问作者Alhaitham
相关产品推荐
相关产品推荐

