È possibile utilizzare il comando Unix "tail + n" per rimuovere le prime n righe di output. Quell'intestazione assomiglia a 10 linee, quindi questo lo spoglierà.
$ matlab -nosplash -nodesktop -nodisplay -r test | tail +10
Questo è un po 'fragile, però, dal momento avvertimenti (come che "nessun sistema finestra") avranno messo a nudo, e le dimensioni dell'intestazione varierà a seconda di cosa gli avvertimenti accadere (e questi avvertimenti sono la diagnostica utili). Inoltre, questo avviso potrebbe essere su STDERR invece di STDOUT, quindi "tail +9" potrebbe essere quello che ti serve.
Un approccio più robusto potrebbe essere quello di modificare lo script Matlab per scrivere in un file separato utilizzando fopen/fprintf/fclose. In questo modo l'intestazione, gli avvertimenti, gli errori, ecc. Di Matlab saranno separati dall'output formattato desiderato. Per ottenere l'output "disp" per andare a quell'handle di file separato, puoi catturarlo usando evalc. Il file di output potrebbe essere specificato utilizzando un argomento da test() nel messaggio -r e la variabile di env $$ (il PID del processo di bash) incorporata nel nome del file per evitare collisioni in un ambiente a più processi.
function test(ppid)
outfile = sprintf('outfile-%d.tmp', ppid);
fh = fopen(outfile, 'w');
myvar = rand(3,4);
str = evalc('disp(myvar)');
fprintf(fh, '%s', str);
fclose(fh);
Per richiamarlo da bash, utilizzare questo modulo di chiamata. (Può essere problemi di sintassi minori qui, io non ho una scatola di Unix per testare in questo momento.)
% matlab -nosplash -nodisplay -r "test($$)" -logfile matlab-log-$$.tmp
Diciamo che il vostro bash PID è 1234. Ora hai la tua uscita in outfile-1234. tmp e un log Matlab in matlab-log-1234.tmp. Attaccali in/tmp se non vuoi essere dipendente da pwd. È possibile estendere questo per creare più file di output da una singola chiamata MATLAB, risparmiando i costi di avvio se è necessario calcolare più cose.
fonte
2009-10-05 14:10:14
In Octave è possibile utilizzare il flag '-q'. – sffc