2016-06-27 5 views
1

저는 Ubuntu에 Matlab 2014를 설치했습니다. 내 문제 : Matlab의 다른 프로그램 인 Quantum Espresso에 대한 여러 입력 파일을 빌드합니다. 이제 Matlab 커맨드 라인을 사용하여 Quantum Espresso에이 파일들을 전달해야합니다. 이제 리눅스 터미널을 사용하여이 작업을 수행 할 수 있다는 것을 알았지 만 나의 문제를 해결하는 나의 방법은 나의 유일한 옵션이 'matlab에서 Quantum Espresso를 호출하는 것'이라는 요점에 도달했습니다. 실제로 한 번만 전화하면 쉽습니다.루프에서 matlab에서 외부 프로그램 호출

! installation/folder/espresso-5.3.0/bin/pw.x <inputfile> outputfile 

문제는 몇 가지 입력 파일 이름이 1name.in 1name.in ...입니다. 따라서이 반복 호출은 루프에서 수행되어야합니다. 그러나 어떻게?

시도 : 파일을 루핑하기위한 쉘 스크립트. 나는 그 여분의 것을 더했다! 스크립트의 각 줄에 있지만 작동하지 않습니다. 내 입력 파일의 수에

for i = 1:N 

prefix = int2str(i); 
fuloutname = [prefix 'name' '.' 'out']; 
fulinname = [prefix 'name' '.' 'in']; 
! adress/espresso-5.3.0/bin/pw.x <fulinname> fuloutname ; 

end 

에서 'N': 나는이 같은 루프를 작성했습니다. 분명히 이것을 실행한다는 것은 1name.in이 아닌 'fulinname'이라는 이름의 파일을 전달하고 'fuloutname'이라는 출력 파일을 생성한다는 것을 의미합니다.

일반적으로 루프에서 다양한 파일을로드 할뿐만 아니라 작동하지 않았다

도와주세요.

+1

' command1 = '$ 1 * .in''의 값을 ... 그리고 나서'unix (command1)'? '/ bin/bash : -c : 1 행 : 문법 오류 : 예기치 않은 파일 끝 ' – obchardon

+0

@obchardon 내가 그것을 사용해야하는'unix' 기능,'mycommand = 'mycall''와'유닉스 (mycommand)를'사용해야 –

+0

답에서 그것을 옮겼습니다 - @ fb.researcher - matlab'!'에 문자열을 더한 것입니다. 나는 정말로 @obchardon이 질문에 정확하게 대답했다고 믿는다. – bdecaf

답변

1

당신은 unix 기능을 사용해야합니다

for i = 1:N 

prefix = int2str(i); 
fuloutname = [prefix 'name' '.' 'out']; 
fulinname = [prefix 'name' '.' 'in']; 
mycommand = ['adress/espresso-5.3.0/bin/pw.x < ',fulinname,' > ',fuloutname]; 
unix(mycommand); 
%system(mycommand); %will give you the same, result and this function is cross-platform 

end 
좋아하는 당신은
+0

하지만'system' 명령은'!'와 같은 것이라고 생각합니다. (그것도 승리에서 작동) – bdecaf

+0

유닉스 머신에서는'unix', 윈도우 머신에서는'dos', 두 머신에서는'system'이 작동합니다. 그래서 그래, 똑같은 출력을 줄 것입니다. – obchardon

+0

@obchardon 결과가'unix (mycommand); 행에 도달하면'STOP 1 '이됩니다. –