2012-05-10 14 views
14

Sto scrivendo alcuni script di shell con haskell, che sto usando in gitbash, ma ci sono alcuni altri script esistenti che mi piacerebbe poter usare da quegli script.È possibile invocare bash o script di shell da un programma haskell?

Ad esempio, mi piacerebbe eseguire gli obiettivi Maven o fare un tiro Git, ma senza dover integrare specificamente con tali strumenti.

C'è un modo per farlo?

risposta

16

È possibile utilizzare System.Process. Ad esempio, eseguendo seq 1 10 comando shell:

> 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

Naturalmente. È possibile iniziare utilizzando system per richiamare processi esterni.

Le pipeline più sofisticate e il controllo di processo sono disponibili in modo multipiattaforma dalla libreria System.Process.

Infine, è possibile considerare il porting degli script della shell in Haskell, via shell DSLs.

8

Sì, è possibile. È possibile utilizzare il pacchetto process, che esporta molte funzioni utili. Il più semplice è System.Cmd.system, che può eseguire alcune applicazioni nella shell, fornendo il codice di uscita.

Ulteriori funzioni avanzate sono disponibili anche nel modulo System.Process. Con questo modulo è possibile eseguire il processo e comunicare con esso in molti modi (piping di input, codici di uscita, attesa di arresto del processo, modifica dell'ambiente ecc.).

5

Turtle è abbastanza bella moderna libreria haskell per questo.

Problemi correlati