2012-05-10 66 views
14

Piszę niektóre skrypty powłoki z haskell, które uruchamiam w gitbash, ale istnieje kilka innych istniejących skryptów, które chciałbym móc używać z tych skryptów.Czy można wywołać skrypty bash lub powłoki z programu haskell?

Na przykład chciałbym uruchomić cele maven lub zrobić git pull, ale bez konieczności integracji z tymi narzędziami.

Czy istnieje sposób, aby to zrobić?

Odpowiedz

16

Można użyć System.Process. Na przykład wykonanie seq 1 10 powłoki polecenie:

> 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

oczywiście. Możesz zacząć, używając system, aby wywołać procesy zewnętrzne.

Bardziej zaawansowane sterowanie rurociągami i procesami jest dostępne na wiele platform z biblioteki System.Process.

Wreszcie, możesz rozważyć przeniesienie skryptów powłoki do Haskell, via shell DSLs.

8

Tak, jest to możliwe. Możesz użyć pakietu process, który eksportuje wiele użytecznych funkcji. Najprostszy to System.Cmd.system, który może uruchomić pewną aplikację w powłoce, generując kod wyjścia.

Bardziej zaawansowane funkcje są również dostępne w module System.Process. Za pomocą tego modułu można uruchamiać proces i komunikować się z nim na wiele sposobów (wejściowe orurowanie, kody wyjścia, oczekiwanie na zatrzymanie procesu, modyfikacja jego środowiska itp.).

Powiązane problemy