Имя переменной оболочки, запрашиваемое у Matlab, имеет дополнительный символ - PullRequest
1 голос
/ 09 марта 2012

Я работаю со следующим сценарием run_test:

#!/bin/sh

temp=$1;
cat <<EOF | matlab

[status name] = unix('echo $temp');
disp(name);

% some Matlab code

test_complete = 1;
save(name)

exit
EOF

Я хочу передать имя сценарию, выполнить некоторый код и сохранить файл .mat с именем, которое было передано.Тем не менее, есть любопытная часть поведения:

[energon2] ~ $ ./run_test 'run1'
Warning: No display specified.  You will not be able to display graphics on the screen.

                            < M A T L A B (R) >
                  Copyright 1984-2010 The MathWorks, Inc.
                Version 7.12.0.635 (R2011a) 64-bit (glnxa64)
                               March 18, 2011


  To get started, type one of these: helpwin, helpdesk, or demo.
  For product information, visit www.mathworks.com.

>> >> >> >> run1

>> >> >> >> >> 
[energon2] ~ $ ls *.mat
run1?.mat

Есть "?"в конце имени файла при его сохранении, но не при отображении в командной строке.Это приемлемо для моих нужд, но немного раздражает, когда я не знаю, почему это происходит.Любое объяснение будет приветствоваться.

Правка, решение: Юк был прав в приведенной ниже причине и использовании сохранения ('$ temp').Я сейчас использую следующий скрипт

#!/bin/sh

temp=$1;
cat <<EOF | matlab

% some Matlab code

test_complete = 1;
save('$temp')

exit
EOF

Спасибо за помощь.

1 Ответ

3 голосов
/ 10 марта 2012

Вы name переменная имеет конец строки в качестве последнего символа. Когда вы запускаете echo run1 в Unix, эта команда отображает run1, а затем «нажимает ввод». В вашем скрипте все выходные данные echo сохраняются в name variable.

Вы можете подтвердить это следующим:

>> format compact
>> [status, name] = unix('echo run1')
status =
     0
name =
run1

>> numel(name)
ans =
     5
>> int8(name(end))
ans =
   10
>> int8(sprintf('\n'))
ans =
   10

Очевидно, этот символ может быть частью имени файла в Unix, но оболочка отображает его как ?.

Разве вы не можете сделать save($temp) вместо этого?

РЕДАКТИРОВАТЬ : См. Мои комментарии ниже для исправления и дополнительных пояснений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...