Вы можете использовать команду Unix "tail + n", чтобы удалить первые n строк вывода. Этот заголовок выглядит как 10 строк, поэтому он будет зачищен.
$ matlab -nosplash -nodesktop -nodisplay -r test | tail +10
Это немного хрупко, так как предупреждения (например, «без оконной системы») будут удалены, а размер заголовка будет варьироваться в зависимости от того, какие предупреждения происходят (и эти предупреждения являются полезной диагностикой). Кроме того, это предупреждение может быть на STDERR вместо STDOUT, поэтому вам может понадобиться "tail +9".
Более надежным подходом может быть изменение сценария Matlab для записи в отдельный файл с помощью fopen / fprintf / fclose. Таким образом, заголовок, предупреждения, ошибки и т. Д. Из Matlab будут отделены от желаемого форматированного вывода. Чтобы получить вывод disp для перехода к этому отдельному дескриптору файла, вы можете захватить его, используя evalc. Выходной файл может быть указан с помощью аргумента test () в сообщении -r, а переменная $$ env (PID процесса bash) включена в имя файла для предотвращения конфликтов в многопроцессорной среде.
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);
Чтобы вызвать его из bash, используйте эту форму вызова. (Здесь могут быть небольшие проблемы с синтаксисом; у меня нет Unix-бокса для тестирования прямо сейчас.)
% matlab -nosplash -nodisplay -r "test($$)" -logfile matlab-log-$$.tmp
Допустим, ваш PID bash равен 1234. Теперь у вас есть выходные данные в outfile-1234.tmp и журнал Matlab в matlab-log-1234.tmp. Вставьте их в / tmp, если вы не хотите зависеть от pwd. Вы можете расширить это, чтобы создать несколько выходных файлов из одного вызова Matlab, экономя затраты на запуск, если вам нужно вычислить несколько вещей.