2012-03-12 3 views
1

안녕하세요, 그래서 일부 파일을 읽는 기준으로 문자열을 보냅니다 bash 명령이 있습니다. 단순함을 위해 이렇게 말하십시오.matlab에서 외부 스크립트 호출 및 출력 캡쳐

for line in `cat file` 
do 
if [ "$line" == "IwantThisLine" ] 
then 
echo "True" 
fi 
done 

그리고 저는 개별 스크립트로 저장했습니다. 이것은 readRef.sh라고 불린다. 그래서 지금은 MATLAB에서 그것을 호출하고 변수에 출력 뭐든 저장 싶어요! 나는 그것을하는 방법에 대해 잘 모르겠다. 나는 system()에서 evalc()를 사용할 때 오류가있는 것 같다. 하지만 인용문을 망칠 수 있습니다.

나는

evalc(system(['./readRef.sh ' bamfile'])) 

은 "bamfile"와 같은 뭔가 bamfile의 경로에 단지 문자열 변수는 시도.

이 오류가 발생합니다.

>> tes = evalc(system(['./readRef.sh ' smplBamFile])) 
hg18 
??? Undefined function or method 'evalc' for input arguments of type 'double'. 

동시에 "matlab"변수를 설정하려는 "hg18"을 내뱉습니다.

+1

스크립트를 실행하려고 시도한'evalc' /'system' 명령과 함께 제공되는 오류 메시지를 제공 할 수 있습니까? (제쳐두고 - bash (예를 들어'sh/readRef.sh'?)에서 실행할 때 스크립트 자체가 작동합니까? 실행 비트를 설정 했습니까?) –

+0

'smplBamFile'은 문자열이 아닐 수 있습니다 - could 당신은'class ([ './ readRef.sh'smplBamFile])'를합니까? –

+0

그것은 'char'라고합니다. –

답변

3

아, 알 수 있습니다. 나는 당신이 evalc을 전혀 필요로하지 않는다고 생각한다. 읽기 system docs 당신은 다만 할 수 있습니다

[status, result] = system('echo True; echo "I got a loverly bunch of coconuts"') 

그리고 result 그래서

True 
I got a loverly bunch of coconuts 

될 것입니다 만 수행

[status, result] = system(['./readRef.sh ' smplBamFile]) 
evalc가 작동하지 않는 이유는

는 그것의 입력을 요구하는 문자열에있는 Matlab 표현 이 되려면의 결과를 전달해야합니다..

당신이 시도 할 수 :

evalc("system(['./readRef.sh ' smplBamFile])") 

을 내가 문자열로 system(...)를 전달하고있어 방법을 참조하십시오

+0

예 이미 시스템 (...)을 문자열로 전달하려고했지만 불행히도 예기치 않은 오류가 발생했습니다. 네가 말한 것을 시험해보고 너에게 알려주지. 고마워. –

+1

문자열로 전달하려고 시도한 경우 해당 시도와 질문을 질문에 넣으십시오.질문을 할 때마다 * 모든 * 시도 * 및 * 관련된 오류 메시지를 넣으십시오. 이것은 당신을 도우려는 사람들에게 큰 도움이 될 것이며 문제가 잘못되어 있지 않은 것으로 오인되지 않도록 방지 할 것입니다. –

0

system(...)은 출력이 아닌 실행 한 명령의 리턴 코드를 리턴하기 때문에이 오류가 발생합니다. 출력을 캡쳐하려면

[~, output] = system(...) 
tes = evalc(output); 
관련 문제