Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何从命令行调用MATLAB脚本?_Bash_Matlab - Fatal编程技术网

Bash 如何从命令行调用MATLAB脚本?

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(我有一个Mac),让它简单地为我运行一个程序,没有显示或任何东西,只是程序。这个程序既显示图形,又编写文本文件供我使用。我已经找到了这个问题之前的几个答案,因此我尝试了:

   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