我将使用 SSH 在远程 Linux 服务器上运行 Matlab 程序。我想知道如何只用命令行在 Linux 中运行 Matlab,这意味着没有图形环境?
谢谢。
我将使用 SSH 在远程 Linux 服务器上运行 Matlab 程序。我想知道如何只用命令行在 Linux 中运行 Matlab,这意味着没有图形环境?
谢谢。
使用以下标志启动 MatLab
matlab -nodesktop -nojvm -nosplash
-nodesktop
防止桌面
-nojvm
阻止启动 java 虚拟机
-nosplash
防止启动闪屏。
请注意,正如 Li-aung Yip 在评论中指出的那样,Mathworks 不建议使用该-nojvm
标志。
命令是matlab -nodesktop
。
matlab -nodisplay
请参阅此处-nodisplay
。
然后-nodesktop
和-nosplash
是不必要的。它们在文本模式下没有意义。
-nojvm
除非您有单独的充分理由,否则添加可能不是一个好主意。如果没有 JVM,您将失去一些功能,这些功能的缺失可能会在以后导致混乱。来源:与上述相同的链接。最重要的是-nodisplay
,它不会使您的非图形化 Matlab 会话的图形化程度降低。
这里有几种非交互方式运行命令的方法。
方式一:
matlab -nodisplay < myScript.m
exit
例如,将最后一个命令放入myScript.m
.
方式二:
matlab -nodisplay -r "try, myFunction(); catch e, disp(getReport(e)), exit(7), end, exit()"
第二种方式更可取,因为例如,如果代码中间有错误,那么第二种方式将打印错误消息并以非零代码退出。而第一种方法相当于直接输入命令,不管 Matlab 说什么(可能是错误消息)。
如果下一个问题是“如何在文本模式 Matlab 中抑制欢迎消息?”,似乎没有很好的方法来摆脱它。
将其他答案放在一起加上更多错误处理,将以下内容另存为可执行文件matlab-headless
:
#/usr/bin/env bash
# restore the "sane" state of the terminal at the end
# otherwise interrupting the process may leave the terminal messed up
trap 'stty sane' EXIT
command="try, $1;, catch e, stack=getReport(e); fprintf(1, '%s\n', stack);, end, exit;"
# tail gets rid of the welcome message banner
matlab -nodisplay -nodesktop -nosplash -r "$command" | tail -n +11
现在您可以运行 Matlab 命令:
matlab-headless "somecommand('bla', 42)"
根据您的需要,另一种方法是:
matlab -nosplash -nodesktop -wait -log -r "Matlab Script Line 1;Matlab Script Line 2;exit;"
这与 Azure DevOps Pipeline 用于将所有 Matlab 作业输出记录到其在线 CLI 窗口的方法相同。
参考:自托管 Windows 代理
位置:C:\agent\_work\_tasks\RunMATLABCommand_28fdff80-51b4-4b6e-83e1-cfcf3f3b25a6\0.2.15\bin\run_matlab_command.bat