Scala에서는 Bash Shell을 부를 수 있는 방법이 있습니다. 이로 인하여, 쉽게 다른 프로그램을 구동 시키거나, 결과 값을 불러 올 수 있습니다.
예제는 Scala REPL을 사용 해 봅시다.
먼저, Bash Shell을 사용할 수 있는 scala의 sys.process._를 Import 해 봅시다.
scala> import sys.process._
import sys.process._
명령어 실행
만약 명령어를 실행 하고 싶다면
scala> "{명령어}" !
를 사용하면 됩니다. 그러나, 리턴값은 나오지 않습니다.
scala> "ls -al" !
warning: there was one feature warning; re-run with -feature for details
합계 7156
drwxr-xr-x 50 ktz ktz 4096 8월 16 10:25 .
drwxr-xr-x 3 root root 4096 4월 19 13:31 ..
-rw------- 1 ktz ktz 13760 8월 16 10:25 .ICEauthority
drwxrwxr-x 4 ktz ktz 4096 4월 19 15:38 .IdeaIC2016.1
drwxrwxr-x 4 ktz ktz 4096 7월 16 12:33 .IdeaIC2016.2
drwxrwxr-x 4 ktz ktz 4096 4월 28 15:06 .TelegramDesktop
-rw------- 1 ktz ktz 62 8월 16 10:25 .Xauthority
... (너무 많아서 줄입니다.)
res0: Int = 0
리턴값을 받는 명령어 실행
만약 리턴 값을 받고 싶다면,
scala> "{명령어}" !!
를 사용 합니다.
scala> val result = "ls -al" !!
warning: there was one feature warning; re-run with -feature for details
result: String =
"합계 7156
drwxr-xr-x 50 ktz ktz 4096 8월 16 10:25 .
drwxr-xr-x 3 root root 4096 4월 19 13:31 ..
-rw------- 1 ktz ktz 13760 8월 16 10:25 .ICEauthority
drwxrwxr-x 4 ktz ktz 4096 4월 19 15:38 .IdeaIC2016.1
drwxrwxr-x 4 ktz ktz 4096 7월 16 12:33 .IdeaIC2016.2
drwxrwxr-x 4 ktz ktz 4096 4월 28 15:06 .TelegramDesktop
-rw------- 1 ktz ktz 62 8월 16 10:25 .Xauthority
drwx------ 3 ktz ktz 4096 4월 19 14:48 .adobe
drwxrwxr-x 3 ktz ktz 4096 5월 20 14:07 .android
drwxrwxr-x 2 ktz ktz 4096 7월 13 13:42 .aws
-rw------- 1 ktz ktz 102750 8월 16 20:22 .bash_history
-rw-r--r-- 1 ktz ktz 220 4월 19 13:31 .bash_logout
-rw-r--r-- 1 ktz ktz 3939 5월 29 16:25 .bashrc
drwxrwxr-x 3 ktz ktz 4096 7월 14 19:08 .byobu
dr...
scala> println(result)
합계 7156
drwxr-xr-x 50 ktz ktz 4096 8월 16 10:25 .
drwxr-xr-x 3 root root 4096 4월 19 13:31 ..
-rw------- 1 ktz ktz 13760 8월 16 10:25 .ICEauthority
drwxrwxr-x 4 ktz ktz 4096 4월 19 15:38 .IdeaIC2016.1
drwxrwxr-x 4 ktz ktz 4096 7월 16 12:33 .IdeaIC2016.2
drwxrwxr-x 4 ktz ktz 4096 4월 28 15:06 .TelegramDesktop
-rw------- 1 ktz ktz 62 8월 16 10:25 .Xauthority
drwx------ 3 ktz ktz 4096 4월 19 14:48 .adobe
drwxrwxr-x 3 ktz ktz 4096 5월 20 14:07 .android
drwxrwxr-x 2 ktz ktz 4096 7월 13 13:42 .aws
-rw------- 1 ktz ktz 102750 8월 16 20:22 .bash_history
... (너무 많아서 줄입니다.)
이렇게 다음과 같이 result 변수에 리턴 값을 받아 넣을 수 있습니다.
Pipeline을 사용하기
Bash Shell에서는 다음과 같이 사용할 수 있습니다.
$ ls -al | grep Desktop
drwxrwxr-x 4 ktz ktz 4096 4월 28 15:06 .TelegramDesktop
drwxr-xr-x 2 ktz ktz 4096 5월 23 10:15 Desktop
Scala에서도 다음과 같이 사용할 수 있습니다.
scala> val result = "ls -al" #| "grep Desktop" !!
warning: there was one feature warning; re-run with -feature for details
result: String =
"drwxrwxr-x 4 ktz ktz 4096 4월 28 15:06 .TelegramDesktop
drwxr-xr-x 2 ktz ktz 4096 5월 23 10:15 Desktop
"
다만 Scala에서는 | 가 이미 예약어로 등록이 되어 있으므로, "#|" 를 사용합니다.
'00. Functional Programming > Scala' 카테고리의 다른 글
SBT와 SSH or SFTP를 이용한 개인용 Maven Repository 구축 (0) | 2016.09.19 |
---|---|
Scala에서 JNI 사용하기 (0) | 2016.04.10 |
Scala IDE 설치 & Hello World Example (0) | 2014.11.12 |