Bash 如何从命令行调用MATLAB脚本?
我一直在尝试从终端调用matlab(我有一个Mac),让它简单地为我运行一个程序,没有显示或任何东西,只是程序。这个程序既显示图形,又编写文本文件供我使用。我已经找到了这个问题之前的几个答案,因此我尝试了:Bash 如何从命令行调用MATLAB脚本?,bash,matlab,Bash,Matlab,我一直在尝试从终端调用matlab(我有一个Mac),让它简单地为我运行一个程序,没有显示或任何东西,只是程序。这个程序既显示图形,又编写文本文件供我使用。我已经找到了这个问题之前的几个答案,因此我尝试了: matlab -nodisplay -r foo matlab -nodisplay -r foo.m matlab -nojvm -nosplash -nodisplay -r foo;quit; matlab -nojvm -nosplash -nod
matlab -nodisplay -r foo
matlab -nodisplay -r foo.m
matlab -nojvm -nosplash -nodisplay -r foo;quit;
matlab -nojvm -nosplash -nodisplay -r "foo;quit;"
matlab -nojvm -nodesktop -r "foo;quit;"
matlab -nojvm -nodesktop -r
"foo"
matlab -nojvm -nodesktop -nosplash -r foo
几乎每次我尝试它时,都会得到相同的响应(当该行没有导致提示说“去你的”并放弃时):实际的MATLAB程序窗口将打开,并且将保持打开状态。它将正常交互。在我关上窗户之前,命令行不会做任何事情。我想要的程序没有运行。窗户正好。。。他坐在那里
如果有帮助的话,这就是我在我的bin中matlab
编码的方式:
#!/bin/bash
/Applications/MATLAB_R2015b.app/bin/matlab
我不知道发生了什么事。任何帮助都将不胜感激。我认为bash脚本忽略了命令行参数。 你能试试下面的吗
/Applications/MATLAB_R2015b.app/bin/matlab -nosplash -nodisplay -r "run foo.m;quit;"
这应该能奏效
matlab -nodisplay -nodesktop -nosplash -nojvm -r "foo($v1,$v2);exit"
享受调用Matlab的
bash
脚本不会向Matlab可执行文件传递任何参数。你打字的时候
$ matlab -nodesktop -nosplash -r "foo"
实际上所谓的是
$ /Applications/MATLAB_R2015b.app/bin/matlab
没有争论。有几种方法可以解决这个问题,同时保持调用matlab
的方便性。或者,您可以调用matlab
的完整路径,如
$ /Applications/MATLAB_R2015b.app/bin/matlab -nodesktop -nosplash -r "foo"
设置matlab
可执行文件
Bash脚本
假设您已经编写了一个bash
脚本来调用matlab
,最简单的解决方案是将其修改为包含$@
bash
通配符
#!/bin/bash
/Applications/MATLAB_R2015b.app/bin/matlab "$@"
$@
通配符将您使用的所有参数,如-nodesktop-nosplash-r“foo”
传递给matlab
可执行文件,因此现在实际调用的是
$ /Applications/MATLAB_R2015b.app/bin/matlab -nodesktop -nosplash -r "foo"
我建议您将matlab
bash
脚本放置在/usr/local/bin
中,并确保/usr/local/bin
位于路径中。/usr/local/
目录用于用户安装的脚本,而不是系统安装的脚本。您可以使用查看路径中的目录
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
您应该会看到一个类似于上面的输出,其中存在/usr/local/bin
。bash
脚本也应该是可执行的。您可以将此设置为
$ sudo chmod +x /usr/local/bin/matlab
注意:OS X El Capitan通过其新功能对脚本的安装位置进行了严格限制
创建指向matlab的符号链接
另一种类似于创建bash
脚本的方法是创建指向matlab
可执行文件的符号链接。这同样应该放在/usr/local/bin
$ cd /usr/local/bin/
$ ln -s /Applications/MATLAB_R2015b.app/bin/matlab matlab
此外,对于此方法,您需要确保/usr/local/bin
位于您的路径中
将matlab
添加到路径
另一种方法是简单地将matlab
可执行文件所在的目录添加到路径中。您可以通过修改.bash\u配置文件
(或.bashrc
)文件来完成此操作。您的.bash\u配置文件
位于主目录中的~/.bash\u配置文件
。它在用户每次打开终端时执行。要将matlab
添加到路径
中,只需添加
export PATH=$PATH:/Applications/MATLAB_R2015b.app/bin/
去吧。现在,您可以使用调用matlab
$ matlab -nodesktop -nosplash -r "foo"
这将在/Applications/matlab_R2015b.app/bin/
中找到matlab
可执行文件,并使用
$ /Applications/MATLAB_R2015b.app/bin/matlab -nodesktop -nosplash -r "foo"
修改.bash\u配置文件后,需要重新加载该文件
$ source ~/.bash_profile
或者重新启动终端,使更改生效
注意:我更喜欢修改.bashrc
文件,而不是.bash\u配置文件
,因为我在Linux上也使用.bashrc
。我已将我的.bash\u配置文件设置为加载我的.bashrc
文件
$ cat .bash_profile
# Load .bashrc if it exists
test -f ~/.bashrc && source ~/.bashrc
注意:如果希望matlab
适用于每个用户,而不仅仅是您的用户,您需要添加
export PATH=$PATH:/Applications/MATLAB_R2015b.app/bin/
到系统范围的/etc/profile
文件
为matlab
我要提到的最后一种方法是为matlab
创建别名。我们通过再次修改.bash_概要文件
(或.bashrc
)文件并添加
alias matlab="/Applications/MATLAB_R2015b.app/bin/matlab"
去吧。同样,在进行更改后,我们需要使用
$ source ~/.bash_profile
或者重新启动终端,使更改生效。而且,如果希望matlab
可供每个用户使用,而不仅仅是您的用户,则需要修改系统范围的/etc/profile
文件
从终端执行matlab
现在,我们已经设置了matlab
,以便使用简单的命令从终端方便地执行
$ matlab
我们可以看看实际执行的脚本。要执行Matlab脚本,我们首先需要位于脚本所在的目录中,或者它可以位于我们的Matlab路径中。我假设它不在您的路径中,因此我们将cd
转到正确的目录
$ cd /path/to/foo.m
现在在没有桌面MathWorks的情况下执行matlab
告诉我们使用-nojvm-nodisplay-nosplash
,但是如果我们使用-nojvm
和/或-nodisplay
,我们将无法显示图形。因此,我们删除-nojvm
并将-nodisplay
替换为-nodesktop
并使用-nodesktop-nosplash
。这将在没有显示器的情况下启动Matlab,并允许我们显示图形。在没有完整的桌面GUI的情况下执行matlab
,同时允许我们显示图形的正确命令是
$ matlab -nodesktop -nosplash
现在,您可以使用终端(命令提示符)作为Matlab命令窗口,并正常执行命令。例如,我们可以称之为foo
>> foo
或者,我们可以为matlab
可执行文件使用-r
选项来传递命令供matlab执行这些必须是报价单
$ matlab -nodesktop -nosplash -r "foo"
$ matlab -nodesktop -nosplash -r "foo; exit;"
#!/bin/bash
/Applications/MATLAB_R2015b.app/bin/matlab < /path/to/foo.m