【发布时间】:2012-06-15 07:36:23
【问题描述】:
我将使用 SSH 在远程 Linux 服务器上运行 Matlab 程序。 我想知道如何在Linux中只用命令行运行Matlab,也就是说没有图形环境?
谢谢。
【问题讨论】:
标签: linux matlab command-line ssh
我将使用 SSH 在远程 Linux 服务器上运行 Matlab 程序。 我想知道如何在Linux中只用命令行运行Matlab,也就是说没有图形环境?
谢谢。
【问题讨论】:
标签: linux matlab command-line ssh
matlab -nodisplay
那么-nodesktop 和-nosplash 是不必要的。它们在文本模式下没有意义。
添加-nojvm 可能不是一个好主意,除非您有单独的充分理由这样做。如果没有 JVM,您将失去一些功能,而这些功能的缺失可能会在以后导致混乱。来源:same link as above。在-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 中抑制 welcome 消息?”,it seems there is NO good way to get rid of it。
【讨论】:
-batch 选项专门用于以非交互方式运行脚本。它避免了-r 的所有问题(需要try/catch 和exit 语句),并且还抑制了横幅。 -r 自该版本以来不再推荐。
使用以下标志启动 MatLab
matlab -nodesktop -nojvm -nosplash
-nodesktop 阻止桌面
-nojvm 阻止 java 虚拟机的启动
-nosplash 防止启动闪屏。
请注意,正如 Li-aung Yip 在 cmets 中指出的那样,Mathworks 不建议使用 -nojvm 标志。
【讨论】:
-nojvm 和 -nosplash 标志有什么作用?
-nosplash 阻止启动启动画面,-nojvm 阻止启动 java 虚拟机。
-nodesktop 和 -nojvm 略有不同。 Here's an explanation by Michael Katz of The Mathworks.
-nodesktop 和-nojvm 是相同的(这就是我列出这两个标志的原因)。但是,阅读您的链接后,我意识到,与我之前的想法相反,JVM 不仅仅用于吸引眼球(您的评论 +1)。因此,根据您使用的功能,您可能还需要非桌面模式下的 JVM。不过我从来没有遇到过这种情况……
命令是matlab -nodesktop。
【讨论】:
将其他答案放在一起,再加上一些错误处理,将以下内容另存为可执行文件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)"
【讨论】:
-r。现在你只需要matlab -batch myscript。
根据您的需要,另一种方法是:
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
【讨论】:
-wait 是一个仅限 Windows 的选项,在 Linux 上,它是决定程序是否在后台运行(无等待)或不运行(等待)的 shell。