2012-05-10 12 views
14

Estoy escribiendo algunas secuencias de comandos de shell con haskell, que estoy ejecutando en gitbash, pero hay algunas otras secuencias de comandos existentes que me gustaría poder utilizar desde esas secuencias de comandos.¿Es posible invocar scripts bash o shell desde un programa haskell?

Por ejemplo, me gustaría ejecutar objetivos de maven o hacer un git pull, pero sin tener que integrar específicamente con esas herramientas.

¿Hay alguna manera de hacerlo?

Respuesta

16

Puede usar System.Process. Por ejemplo, la ejecución de 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

Por supuesto. Puede comenzar utilizando system para invocar procesos externos.

Las tuberías más sofisticadas y el control de proceso están disponibles de forma multiplataforma desde la biblioteca System.Process.

Finalmente, puede considerar portar sus scripts de shell a Haskell, via shell DSLs.

8

Sí, es posible. Puede usar el paquete process, que exporta muchas funciones útiles. El más simple es System.Cmd.system, que puede ejecutar algunas aplicaciones en shell, produciendo el código de salida.

También se proporcionan características más avanzadas en el módulo System.Process. Con este módulo puede ejecutar el proceso y comunicarse con él de muchas maneras (tuberías de entrada, códigos de salida, esperando que el proceso se detenga, modifique su entorno, etc.).

5

Turtle es bastante buena biblioteca moderna de Haskell para esto.

Cuestiones relacionadas