您的bash
脚本调用Matlab时不会向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
在您的PATH
中。 /usr/local/
目录用于用户安装的脚本,而非系统安装的脚本。 您可以使用以下方式检查在您的PATH
中有哪些目录:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
你应该看到与上面类似的输出,其中包含 /usr/local/bin
。 bash
脚本也应该是可执行的。您可以使用以下命令设置:
chmod +x script_name.sh
$ 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
另一种方法是将包含matlab
可执行文件的目录添加到PATH
中。您可以通过修改.bash_profile
(或.bashrc
)文件来完成此操作。您的.bash_profile
文件位于主目录下的~/.bash_profile
处。每次用户打开终端时,都会执行该文件。要将matlab
添加到PATH
中,只需追加
同样需要确保/usr/local/bin
在PATH
中。
export PATH=$PATH:/Applications/MATLAB_R2015b.app/bin/
将其应用于信息技术。现在您可以通过以下方式调用matlab
$ matlab -nodesktop -nosplash -r "foo"
这将定位matlab
可执行文件于/Applications/MATLAB_R2015b.app/bin/
,并调用它。
$ /Applications/MATLAB_R2015b.app/bin/matlab -nodesktop -nosplash -r "foo"
修改完.bash_profile
文件后,您需要使用以下命令重新加载:
$ source ~/.bash_profile
或者重新启动终端以使更改生效。
注意:我更喜欢修改.bashrc
文件而不是.bash_profile
,因为我也在Linux上使用.bashrc
。我已经设置了我的.bash_profile
文件来加载我的.bashrc
文件。
$ cat .bash_profile
test -f ~/.bashrc && source ~/.bashrc
注意: 如果您希望使matlab
对于每个用户都可用,而不仅仅是您自己的用户,则需要添加
export PATH=$PATH:/Applications/MATLAB_R2015b.app/bin/
将别名添加到系统范围的/etc/profile
文件中。
为matlab
创建别名
我要提到的最后一种方法是为matlab
创建别名。我们通过修改.bash_profile
(或.bashrc
)文件并追加来实现这一点。
alias matlab="/Applications/MATLAB_R2015b.app/bin/matlab"
对它进行修改后,我们需要重新加载
$ source ~/.bash_profile
如果您想要更改生效,请重新启动终端。如果您希望matlab
对每个用户都可用,而不仅仅是您的用户,则需要修改系统范围内的/etc/profile
文件。
从终端执行matlab
现在,我们已经设置好matlab
可以通过简单的命令方便地从终端执行。
$ matlab
我们可以开始执行脚本。要执行Matlab脚本,我们首先需要进入脚本所在的目录或它可以在我们的Matlab PATH
中。我假设它不在您的路径中,因此我们将使用cd
命令切换到正确的目录。
$ cd /path/to/foo.m
现在要执行matlab
而不使用桌面版MathWorks告诉我们使用-nojvm -nodisplay -nosplash
,但如果我们使用-nojvm
和/或-nodisplay
,就无法显示图形。因此,我们放弃-nojvm
,将-nodisplay
替换为-nodesktop
并使用-nodesktop -nosplash
。这将启动没有显示器的Matlab,并允许我们显示图形。因此,执行matlab
而不使用完整的桌面GUI同时仍然可以显示图形的正确命令是:
$ matlab -nodesktop -nosplash
现在您可以使用终端(命令提示符)作为Matlab命令窗口,并像平常一样执行命令。例如,我们可以调用foo
>> foo
或者我们可以使用matlab
可执行文件的-r
选项来传递命令给Matlab执行。 这些命令必须被正确引用,并且是有效的Matlab语法。 因此,启动Matlab并执行脚本foo.m
的命令如下:
$ matlab -nodesktop -nosplash -r "foo"
顺带一提:如果我们使用了
$ matlab -nodesktop -nosplash -r "foo; exit;"
(note the use of
exit;
) 这将启动Matlab,执行
foo.m
,显示图形,然后退出Matlab并关闭图形。
matlab -nosplash -nojvm -nodesktop -r "foo"
。 - Nitish