matlab从命令linux行执行脚本

use*_*925 7 linux matlab

有没有办法从linux命令行运行matlab脚本?例如,我有以下简单的脚本"test.m":

x = [1,2,3];
y = [2;3;4];

prod = x*y
disp(prod)
Run Code Online (Sandbox Code Playgroud)

所以我想要的是能够从linux命令行执行该脚本而无需打开matlab GUI或matlab命令行.也就是说,我期待这样的事情:

~$ matlab test.m
Run Code Online (Sandbox Code Playgroud)

我希望在linux命令行上看到产品的结果.

我知道你可以用python做到这一点,例如,

~$ python test.py
Run Code Online (Sandbox Code Playgroud)

但是想知道是否可以用matlab实现同样的目标.

bds*_*ger 23

从 R2019a 开始,首选方法是 test.m 脚本:

matlab -batch "test"
Run Code Online (Sandbox Code Playgroud)

这有几个优点,主要是不需要所有-no标志,如果test.m(必须在搜索路径上)包含错误,MATLAB 将以非零状态退出。

从文档页面,matlab (Linux)

以非交互方式执行 MATLAB 脚本、语句或函数。MATLAB:

  • 在没有桌面的情况下启动
  • 不显示启动画面
  • 执行语句
  • 禁用对首选项的更改
  • 禁用工具箱缓存
  • 将文本记录到stdoutstderr
  • 不显示对话框
  • 如果脚本成功执行,则自动退出,退出代码为 0 。否则,MATLAB 将以非零退出代码终止。

语句是用双引号括起来的 MATLAB 代码。如果statement是 MATLAB 函数或脚本的名称,则不要指定文件扩展名。任何必需的文件都必须位于 MATLAB 搜索路径或启动文件夹中。

-batch在非交互式脚本或命令行工作流中使用该选项。不要将此选项与选项一起使用-r

要测试 MATLAB 会话是否以批处理模式运行,请调用该 batchStartupOptionUsed函数。

例子: -batch "myscript"


Sem*_*aki 17

为了运行脚本,您可以打开Matlab(您可以阻止在没有使用GUI -nodisplay-nodesktop标志的情况下运行它 ),然后使用run命令运行脚本,最后使用关闭matlab exit.

您可以通过一条指令从终端执行所有这些操作:

matlab -nodisplay -nosplash -nodesktop -r "run('path/to/your/script.m');exit;"
Run Code Online (Sandbox Code Playgroud)

但是,在运行脚本之前,Matlab会将欢迎消息输出到控制台.要删除欢迎消息,请跳过前11行(10个取决于您的Matlab版本)使用tail -n +11

所以你的最后指示将是:

matlab -nodisplay -nosplash -nodesktop -r "run('path/to/your/script.m');exit;" | tail -n +11
Run Code Online (Sandbox Code Playgroud)

  • 由于Matlab不会搜索相对于其启动目录的文件(取决于您的配置),因此按照此处的建议,使脚本路径绝对正确并注意相对位置似乎很重要。 (2认同)