繁体   English   中英

matlab 从命令行 linux 行执行脚本

[英]matlab execute script from command linux line

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

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

prod = x*y
disp(prod)

所以我想要的是能够在不打开 matlab GUI 或 matlab 命令行的情况下从 linux 命令行执行该脚本。 也就是说,我期待这样的事情:

~$ matlab test.m

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

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

~$ python test.py

但想知道是否可以用 matlab 实现同样的效果。

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

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

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

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

所以你的最终指令是:

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

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

matlab -batch "test"

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

从文档页面, matlab (Linux)

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

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

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

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

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

示例: -batch "myscript"

我创建了一个名为runm的基本 shell 脚本并将其放入我的路径中:

$ runm mymatlab.m

脚本:

# simple script to run matlab script
if [ $# -eq 0 ]
  then
    echo "please pass m script"
fi

matlab -nodisplay -nosplash -nodesktop -r "run('$1');"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM