You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:24:36