从Windows 10的Matlab调用Ubuntu环境Shell脚本时出现bash缺失错误
解决Windows 10 Matlab调用WSL中Shell脚本失败的问题
我之前也碰到过一模一样的问题——WSL里跑脚本完全正常,从Windows的Matlab调用就报/bin/bash: No such file or directory,大概率是路径格式不兼容或者调用方式不对导致的,下面给你几个针对性的解决方案:
1. 核心问题:Windows与WSL的路径不通用
Windows的路径格式(比如C:\Projects\runCase.sh)在WSL里是无法识别的,必须转换成WSL的挂载路径格式:把盘符改成/mnt/[盘符小写],反斜杠换成正斜杠,比如上面的路径要改成/mnt/c/Projects/runCase.sh。
你可以在Matlab里手动转换,或者写个小函数自动处理:
function wsl_path = win2wsl(win_path) % 把Windows路径转换成WSL路径 win_path = strrep(win_path, '\', '/'); drive = upper(win_path(1)); wsl_path = ['/mnt/', lower(drive), win_path(3:end)]; end
2. 正确调用WSL脚本的方式
Matlab默认的system命令是调用Windows的shell,不是WSL的bash。你必须用wsl命令来启动WSL环境,再执行脚本:
方式一:指定bash执行脚本(兼容无shebang的脚本)
win_script_path = 'D:\OpenFOAM\runCase.sh'; wsl_script_path = win2wsl(win_script_path); % 调用WSL的bash执行脚本 status = system(['wsl bash ', wsl_script_path]); if status ~= 0 error('脚本执行失败,请检查路径或脚本内容'); end
方式二:直接执行脚本(需脚本有shebang和执行权限)
如果你的脚本开头有正确的shebang(比如#!/bin/bash),并且已经在WSL里给脚本加了执行权限(chmod +x /mnt/d/OpenFOAM/runCase.sh),可以直接用wsl调用脚本:
status = system(['wsl ', wsl_script_path]);
3. 排查小技巧
- 先在Matlab里执行
system('wsl pwd'),看看WSL的当前工作目录,避免用相对路径踩坑; - 执行
system(['wsl ls ', wsl_script_path(1:end-3)]),确认脚本确实存在于WSL的对应路径下; - 如果还是报错,试试在Matlab里执行
system('wsl bash -c "echo hello"'),先确认WSL的bash能正常被调用。
4. 其他可能的坑
- 脚本里的相对路径:WSL执行脚本时的工作目录是WSL的默认家目录(
/home/你的用户名),不是Matlab的Windows工作目录,所以脚本里最好用绝对路径; - 权限问题:如果脚本需要读写文件,确保WSL对对应的Windows挂载目录有读写权限(一般默认是有的,但如果碰到权限报错,可以在WSL里用
chmod调整)。
内容的提问来源于stack exchange,提问作者Pablo Alarcón
相关产品推荐
相关产品推荐

