2012-03-09 1 views
1

을 가지고 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 

"?" 저장 될 때 파일 이름의 끝에 있지만 명령 행에 표시되지 않는 경우. 이것은 나의 필요에 받아 들일 만하다, 그러나 그것이 일어나고있는 이유를 모르기 위해 약간 자극적이다. 모든 설명을 주시면 감사하겠습니다.

편집 : 해결책 : Yuk는 근본적인 원인과 save ('$ temp')의 사용에있어 아래에서 정확했습니다. 다음 스크립트를 사용 중입니다.

#!/bin/sh 

temp=$1; 
cat <<EOF | matlab 

% some Matlab code 

test_complete = 1; 
save('$temp') 

exit 
EOF 

도움 주셔서 감사합니다.

+0

'getenv ('temp')는 어떤 결과를 주나요? – macduff

+0

getenv ('temp')는 빈 문자열을 반환합니다. – Sevenless

답변

3

name 변수의 마지막 문자는 행의 끝 문자입니다. 유닉스에서 echo run1을 실행할 때이 명령은 run1을 표시 한 다음 "Enter 키를 누르십시오". 스크립트에서 에코의 모든 출력은 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 

은 분명히이 문자는 유닉스에서 파일 이름의 일부가 될 수 있지만 :

다음으로 확인할 수 있습니다.

대신 save($temp)을 할 수 없습니까?

수정 : 수정 및 자세한 설명은 아래 내 의견을 참조하십시오.

+0

save ($ temp)는 오류를 던지고 save가 문자열을 받아야한다고 주장합니다. – Sevenless

+1

'save $ temp' 또는'save ('$ temp')'는 어떨까요? – yuk

+0

둘 다 작동합니다. Matlab이 쉘 변수에 직접 액세스 할 수 있는지 알지 못했습니다. 고맙습니다. – Sevenless

관련 문제