2012-05-10 5 views
14

저는 gitbash에서 실행중인 haskell을 사용하여 쉘 스크립트를 작성하고 있습니다 만,이 스크립트에서 사용할 수있는 기존의 다른 스크립트가 몇 가지 있습니다.haskell 프로그램에서 bash 또는 쉘 스크립트를 호출 할 수 있습니까?

예를 들어, 나는 maven 목표를 실행하거나 git pull을하고 싶지만 그 도구와 구체적으로 통합 할 필요는 없습니다.

이 방법이 있습니까?

답변

16

System.Process을 사용할 수 있습니다. 물론

> import System.Process 

> readProcess "seq" ["1", "10"] "" 
"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" 
it :: String 

> readProcessWithExitCode "seq" ["1", "10"] "" 
(ExitSuccess,"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n","") 
it :: (GHC.IO.Exception.ExitCode, String, String) 
5

: seq 1 10 쉘 명령을 실행 예를 들어 . system을 사용하여 외부 프로세스를 호출하여 시작할 수 있습니다.

더 복잡한 파이핑 및 프로세스 제어는 System.Process 라이브러리에서 플랫폼 간 방식으로 사용할 수 있습니다.

마지막으로 쉘 스크립트를 하스켈로 이식하는 것을 고려해 볼 수 있습니다 (via shell DSLs).

8

예, 가능합니다. 많은 유용한 기능을 내보내는 process 패키지를 사용할 수 있습니다. 가장 단순한 것은 System.Cmd.system입니다. 쉘에서 응용 프로그램을 실행하여 종료 코드를 생성 할 수 있습니다.

더 많은 고급 기능이 System.Process 모듈에도 제공됩니다. 이 모듈을 사용하면 여러 가지 방법으로 프로세스를 실행하고 통신 할 수 있습니다 (입력 파이프, 종료 코드, 프로세스 중지 대기, 환경 수정 등).

5

Turtle은 꽤 좋은 현대의 haskell 라이브러리입니다.

관련 문제