J'ai essayé d'appeler Matlab à partir de Terminal (j'ai un Mac) et de le faire exécuter simplement un programme pour moi, sans affichage ni rien, uniquement le programme. Ce programme affiche des graphiques et écrit un fichier texte que je peux utiliser. J'ai trouvé plusieurs réponses précédentes à cette question et j'ai donc essayé:
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
À peu près à chaque fois que j'essaye, je continue à avoir la même réponse (quand la ligne ne provoque pas simplement l'invite à dire "va te faire foutre" et abandonne): le programme MATLAB actuel window restera ouvert. Il va interagir normalement. Et la ligne de commande ne fera rien tant que je n'aurai pas fermé la fenêtre. Le programme que je veux ne fonctionne pas. La fenêtre est juste… assise.
Si cela peut aider, voici comment j'ai matlab
codé dans ma corbeille:
#!/bin/bash
/Applications/MATLAB_R2015b.app/bin/matlab
Je n'ai aucune idée de ce qui se passe. Toute aide serait grandement appréciée.
Votre script bash
pour appeler Matlab ne transmettra aucun argument à l'exécutable Matlab. Quand vous tapez
$ matlab -nodesktop -nosplash -r "foo"
ce qui s'appelle réellement est
$ /Applications/MATLAB_R2015b.app/bin/matlab
sans les arguments. Il existe plusieurs façons de résoudre ce problème tout en conservant la facilité d'appeler simplement matlab
. Sinon, vous pouvez appeler le chemin complet vers matlab
comme
$ /Applications/MATLAB_R2015b.app/bin/matlab -nodesktop -nosplash -r "foo"
matlab
ExécutableEtant donné que vous avez déjà écrit un script bash
pour appeler matlab
, la solution la plus simple consiste à le modifier pour inclure le caractère générique $@
bash
comme
#!/bin/bash
/Applications/MATLAB_R2015b.app/bin/matlab "$@"
Le caractère générique $@
transmet tous les paramètres que vous utilisez, tels que -nodesktop -nosplash -r "foo"
à l'exécutable matlab
.
$ /Applications/MATLAB_R2015b.app/bin/matlab -nodesktop -nosplash -r "foo"
Je vous recommande de placer votre script matlab
bash
dans /usr/local/bin
et de vous assurer que /usr/local/bin
est dans votre PATH
. Le répertoire /usr/local/
est destiné aux scripts installés par l'utilisateur, par opposition aux scripts installés par le système. Vous pouvez vérifier quels répertoires sont dans votre PATH
avec
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
et vous devriez voir une sortie similaire à celle ci-dessus avec /usr/local/bin
présent. Le script bash
devrait également être exécutable. Vous pouvez définir cela avec
$ Sudo chmod +x /usr/local/bin/matlab
Remarque: OS X El Capitan impose des restrictions strictes sur l'emplacement d'installation des scripts via sa nouvelle fonctionnalité Protection de l'intégrité du système .
matlab
Une autre méthode similaire à la création du script bash
consiste à créer un lien symbolique vers l'exécutable matlab
. Ceci encore devrait être placé dans /usr/local/bin
$ cd /usr/local/bin/
$ ln -s /Applications/MATLAB_R2015b.app/bin/matlab matlab
Pour cette méthode également, vous devez vous assurer que /usr/local/bin
est dans votre PATH
.
matlab
à la PATH
Une autre méthode consiste simplement à ajouter le répertoire où l'exécutable matlab
réside à votre PATH
. Vous pouvez le faire en modifiant votre fichier .bash_profile
(ou .bashrc
). Votre fichier .bash_profile
se trouve dans votre répertoire personnel à ~/.bash_profile
. Il est exécuté chaque fois que votre utilisateur ouvre le terminal. Pour ajouter matlab
à la PATH
, ajoutez simplement
export PATH=$PATH:/Applications/MATLAB_R2015b.app/bin/
à cela. Maintenant, vous pouvez appeler matlab
avec
$ matlab -nodesktop -nosplash -r "foo"
et cela localisera l'exécutable matlab
dans /Applications/MATLAB_R2015b.app/bin/
et l'appellera avec
$ /Applications/MATLAB_R2015b.app/bin/matlab -nodesktop -nosplash -r "foo"
Après avoir modifié votre fichier .bash_profile
, vous devez le recharger avec
$ source ~/.bash_profile
ou redémarrez le terminal pour que les modifications prennent effet.
Note: Je préfère modifier le fichier .bashrc
au lieu de .bash_profile
car j'utilise aussi .bashrc
sous Linux. J'ai configuré mon fichier .bash_profile
pour charger mon fichier .bashrc
$ cat .bash_profile
# Load .bashrc if it exists
test -f ~/.bashrc && source ~/.bashrc
Note: Si vous voulez que matlab
soit disponible pour chaque utilisateur et pas seulement pour vous, vous devez ajouter
export PATH=$PATH:/Applications/MATLAB_R2015b.app/bin/
dans le fichier /etc/profile
du système.
matlab
La dernière méthode que je vais mentionner est la création d'un alias pour matlab
. Nous le faisons en modifiant à nouveau notre fichier .bash_profile
(ou .bashrc
) et en ajoutant
alias matlab="/Applications/MATLAB_R2015b.app/bin/matlab"
à cela. Encore une fois, après avoir apporté des modifications, nous devons le recharger avec
$ source ~/.bash_profile
ou redémarrez le terminal pour que les modifications prennent effet. Et si vous souhaitez que matlab
soit disponible pour tous les utilisateurs, et pas seulement pour vous, vous devez modifier le fichier /etc/profile
à l’échelle du système.
matlab
à partir du terminalMaintenant que nous avons configuré matlab
pour exécuter facilement à partir du terminal avec la simple commande
$ matlab
nous pouvons regarder en train d'exécuter des scripts. Pour exécuter un script Matlab, nous devons d’abord se trouver dans le répertoire dans lequel il se trouve ou dans notre répertoire Matlab PATH
. Je suppose que ce n'est pas dans votre chemin et nous allons donc cd
dans le bon répertoire
$ cd /path/to/foo.m
Maintenant, pour exécuter matlab
sans le bureau MathWorks nous dit d’utiliser -nojvm -nodisplay -nosplash
, mais si nous utilisons -nojvm
et/ou -nodisplay
, nous ne pourrons pas afficher de graphiques. Nous abandonnons donc -nojvm
et remplaçons -nodisplay
par -nodesktop
et utilisons -nodesktop -nosplash
. Cela lancera Matlab sans affichage et nous permettra d’afficher des graphiques. La commande correcte puis exécuter matlab
sans l'interface graphique complète du bureau tout en nous permettant également d'afficher des graphiques est
$ matlab -nodesktop -nosplash
Vous pouvez maintenant utiliser le terminal (invite de commande) comme fenêtre de commande Matlab et exécuter les commandes normalement. Par exemple, nous pourrions appeler foo
>> foo
Alternativement, nous pouvons utiliser l'option -r
pour que l'exécutable matlab
puisse transmettre des commandes à exécuter par Matlab. Celles-ci doivent être citées correctement et valider la syntaxe Matlab. Donc, notre commande pour démarrer Matlab avec nos options précédentes et pour exécuter le script foo.m
devient
$ matlab -nodesktop -nosplash -r "foo"
Aside: Si, par exemple, nous devions utiliser
$ matlab -nodesktop -nosplash -r "foo; exit;"
(notez l'utilisation de exit;
) ceci démarrerait Matlab, exécuterait foo.m
, afficherait les graphiques, puis quitterait Matlab en fermant aussi les graphiques.
Je pense que le script bash ignore les arguments de la ligne de commande . Pouvez-vous essayer ce qui suit?
/Applications/MATLAB_R2015b.app/bin/matlab -nosplash -nodisplay -r "run foo.m;quit;"
Cela devrait faire l'affaire
matlab -nodisplay -nodesktop -nosplash -nojvm -r "foo($v1,$v2);exit"
prendre plaisir
Vous devriez pouvoir faire
#!/bin/bash
/Applications/MATLAB_R2015b.app/bin/matlab < /path/to/foo.m
en d'autres termes, utilisez le signe <
pour rediriger, sous Linux.