Commande unix MATLAB tronquant la chaîne

J’essaie d’utiliser la commande unix() dans Matlab R2013a pour exécuter une commande shell. La commande particulière est unix(['name_of_program --arguments ' ssortingng_variables...]) aide d’une série de chaînes et / ou de variables de chaîne, par exemple, unix(['name_of_program --arguments ' ssortingng_variables...]) ; et cette chaîne particulière est relativement longue, mais pas si longue qu’elle est exécutée lorsqu’elle est entrée dans le terminal. Cependant, lorsque vous utilisez la commande unix dans Matlab, la chaîne est tronquée à une certaine limite, je ne peux pas comprendre, et deux commandes sont émises, à savoir les sous-chaînes constituant la commande entière que je souhaite exécuter. En plus de convertir mon script Matlab en script shell, je ne peux pas trouver une autre solution. Donc, avant de faire cela, j’apprécierais toutes les suggestions sur la façon de lancer la commande dans son intégralité dans Matlab. Notez que j’ai également essayé de créer la chaîne de commande avant d’émettre la commande unix , par exemple, command = strcat (A,B,C) ou command = [ABC] puis unix(command) tous deux se terminant par le même résultat. Dans son intégralité, la commande est la suivante:

 unix(['mne_do_forward_solution --subject ' subjname ... ' --src ' sourcespacenames{k} ... ' --meas ' datafile ... ' --mri ' transname ... ' --megonly -all --fwd ' fwdname ... ' --overwrite --mindistout rej']) 

mne_do_forward_solution est un programme C et tout ce qui suit -- est un argument d’entrée suivi d’une valeur ou non. Les valeurs d’argument d’entrée, subjname , sourcespacenames{k} , transname , fwdname et fwdname , sont toutes des variables de l’espace de travail Matlab de la classe char .

La cause la plus probable de votre problème est un caractère invisible dans l’une de vos variables de chaîne qui provoque le traitement par la commande unix de deux chaînes distinctes. Peut-être y a-t-il un errant \r ou \0 quelque part? Voici ce que vous faites:

 myCommand = ['mne_do_forward_solution --subject ' subjname ... ' --src ' sourcespacenames{k} ... ' --meas ' datafile ... ' --mri ' transname ... ' --megonly -all --fwd ' fwdname ... ' --overwrite --mindistout rej']; disp(myCommand); % inspect the command ssortingng: does it look good? fprintf(1, '%.0f ', double(myCommand)); % print the ASCII values unix(myCommand); 

Peut-être que cela vous donnera des indices sur ce qui se passe. C’est généralement une bonne idée de créer la chaîne que vous utiliserez en tant que commande en dehors de la fonction dans laquelle vous l’utiliserez – cela rend ce type de débogage plus simple.