내가 MATLAB을 썩 좋아하지 않는 이유는
(학부 시절 여러 교수님들의 MATLAB 극찬론을 들어왔음에도 불구하고)
딱 한 가지는 아니지만, 아무래도 자동화가 힘든 게 주된 원인인 것 같다.
일반적으로 우리가 스크립팅을 해서 실험이나 작업 등을 자동화할 때는
쉘 스크립트에 연속된 명령어들을 잔뜩 적어 넣고 이를 실행시킨 다음,
내가 자리를 비운 시간 동안 컴퓨터가 멋지게 임무를 완수하기를 기대한다.
하지만 MATLAB의 경우 GUI에 상당한 중점을 두고 있다 보니, 아무래도 쉘 환경과는 잘 맞지 않는다.
다음 명령어는 터미널에서 example.m 파일을 실행 (MATLAB GUI에서 F5를 누르는 것과 동일) 한다.
$ matlab -nodisplay < example.m
-nosplash 옵션을 추가하면 시작 화면을 띄우지 않는다 (참조).
물론 -nodisplay 옵션 덕에 화면 자체가 나오지 않기 때문에 시작 화면 또한 볼 일이 없지만
체감상 로딩이 조금 빨라지는 것 같다.
아래와 같은 명령어도 작동한다.
$ matlab -batch -nodisplay -nosplash "example"
형태를 보아하니 MATLAB 커맨드 라인에서 example을 입력하는 것과 동일한 효과가 있는 것 같다.
위의 형태들은 내가 실행하고 싶은 코드가 항상 고정된 루틴으로 작동할 때 유용하다.
하지만 사실 문제는 커맨드 라인 인수를 받아서 동적으로 프로그램을 실행하는 것이다.
example.m 파일이 아래와 같이 되어있다고 생각해보자.
function x = example(a, b, c)
disp(a);
disp(b);
disp(c);
end
정확한 원리는 모르겠지만, 아래 스크립트를 실행하면 example 함수의 결과를 터미널에서 확인 가능하다.
$ matlab -batch "example(1, 2, 3)"
1
2
3
-batch 대신 -r을 사용하는 것도 가능하다.
하지만 이 경우, example 완료된 이후 MATLAB이 종료되지 않고
인터프리터 >> 가 그대로 남아 사용자의 입력을 기다린다.
자동화에 치명적이므로 -batch를 사용하는 것이 적절해 보인다.
이상하게도, -batch와 -r 모두 -nodisplay나 -nosplash 옵션과 함께 사용하면 오류가 발생한다.
문자나 문자열을 인수로 넣어주는 경우에는 작은따옴표로 인수들을 감싸주자.
$ matlab -batch "example('1', 2, 3)"
1
2
3
MATLAB에서 문자와 숫자를 출력하는 법이 달라, 문자는 왼쪽에 딱 붙어서 출력되는 것을 확인할 수 있다.
함수형으로 되어있지 않은 코드는 실행하면서 특정 변수에 동적인 값을 할당하는 것이 굉장히 까다롭다.
가능하다면 MATLAB 사용을 최소한으로 하는 게 쓰기도 좋고 보기도 좋은 스크립트를 만드는 데에 도움이 되지 않을까.
'잡기술 > Ubuntu' 카테고리의 다른 글
터미널에서 함수 사용하기 (0) | 2021.04.24 |
---|---|
우분투 파일에서 특정 단어 찾기 - grep (0) | 2021.04.24 |
우분투 터미널 출력 로그 파일로 저장하기 - tee (0) | 2021.04.24 |
SSH 쉽게 사용하기 (2) - ssh-keygen, ssh-copy-id (0) | 2021.04.23 |
SSH 쉽게 사용하기 (1) - .ssh/config (0) | 2021.04.23 |