簡體   English   中英

如何從命令行調用MATLAB腳本?

[英]How to call MATLAB script from command line?

我一直試圖從終端調用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

我不知道發生了什么事。 任何幫助將不勝感激。

用於調用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 "$@"

$@ wildcard將你使用的所有參數傳遞給matlab可執行文件,比如-nodesktop -nosplash -r "foo" ,所以現在實際調用的是

$ /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腳本也應該是可執行的。 你可以用它來設置

$ 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位於PATH

matlab添加到PATH

另一種方法是簡單地將matlab可執行文件所在的目錄添加到PATH 您可以通過修改.bash_profile (或.bashrc )文件來完成此操作。 您的.bash_profile文件位於~/.bash_profile主目錄中。 每次用戶打開終端時都會執行該操作。 要將matlab添加到PATH只需添加即可

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_profile文件后,需要重新加載它

$ source ~/.bash_profile

或重新啟動終端以使更改生效。

注意 :我更喜歡修改.bashrc文件而不是.bash_profile因為我在Linux上也使用.bashrc 我已將我的.bash_profile文件設置為加載我的.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_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並用-nodesktop替換-nodisplay並使用-nodesktop -nosplash 這將啟動沒有顯示器的Matlab,並允許我們顯示圖形。 然后在沒有完整桌面GUI的情況下執行matlab同時允許我們顯示圖形的正確命令是

$ matlab -nodesktop -nosplash

現在您可以使用終端(命令提示符)作為Matlab命令窗口並正常執行命令。 例如,我們可以調用foo

>> foo

或者,我們可以使用matlab可執行文件的-r選項傳遞Matlab執行的命令。 這些必須正確引用並且有效的Matlab語法 所以我們命令用我們以前的選項啟動Matlab並執行腳本foo.m

$ matlab -nodesktop -nosplash -r "foo"

旁白 :例如,如果我們使用

$ matlab -nodesktop -nosplash -r "foo; exit;"

(注意使用exit; )這將啟動Matlab,執行foo.m ,顯示圖形,然后退出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"

請享用

你應該能做到的

#!/bin/bash
/Applications/MATLAB_R2015b.app/bin/matlab < /path/to/foo.m

換句話說,在Linux中使用< sign重定向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM