Chcete-li spustit skript, můžete otevřít Matlab (jeho spuštění bez GUI můžete zabránit pomocí -nodisplay
a -nodesktop
flags), pak spusťte skript pomocí run
a nakonec zavřete matlab pomocí exit
.
To vše můžete provést z terminálu pomocí jediné instrukce:
matlab -nodisplay -nosplash -nodesktop -r "run('path/to/your/script.m');exit;"
Matlab však před spuštěním skriptu vydá uvítací zprávu do konzole. Chcete-li se zbavit uvítací zprávy, stačí přeskočit prvních 11 řádků (10 v závislosti na verzi Matlabu) pomocí tail -n +11
Vaše poslední instrukce tedy bude:
matlab -nodisplay -nosplash -nodesktop -r "run('path/to/your/script.m');exit;" | tail -n +11
Počínaje verzí R2019a by pro váš skript test.m byla preferovaná metoda:
matlab -batch "test"
To má několik výhod, hlavně není potřeba všech -no
flags a MATLAB se ukončí s nenulovým stavem, pokud test.m (musí být na vyhledávací cestě) obsahuje chybu.
Ze stránky dokumentace matlab (Linux):
Spustit skript, příkaz nebo funkci MATLABu neinteraktivně.MATLAB:
- Spustí se bez plochy
- Nezobrazuje úvodní obrazovku
- Provede příkaz
- Zakáže změny předvoleb
- Zakáže ukládání do mezipaměti panelu nástrojů
- Přihlásí text do
stdout
astderr
- Nezobrazuje dialogová okna
- Automaticky se ukončí s kódem ukončení 0, pokud je script provede úspěšně. V opačném případě se MATLAB ukončí s nenulovým výstupním kódem.
prohlášení je kód MATLABu uzavřený do dvojitých uvozovek. Pokud prohlášení je název funkce nebo skriptu MATLABu, nezadávejte příponu souboru. Jakýkoli požadovaný soubor musí být na vyhledávací cestě MATLABu nebo ve spouštěcí složce.
Použijte
-batch
možnost v neinteraktivním skriptování nebo práci s příkazovým řádkem. Nepoužívejte tuto možnost s-r
možnost.Chcete-li otestovat, zda relace MATLABu běží v dávkovém režimu, zavolejte
batchStartupOptionUsed
funkce.Příklad:
-batch "myscript"
Vytvořil jsem základní skript shellu nazvaný runm
a vložte mi do cesty:
$ runm mymatlab.m
Scénář:
# simple script to run matlab script
if [ $# -eq 0 ]
then
echo "please pass m script"
fi
matlab -nodisplay -nosplash -nodesktop -r "run('$1');"