2012-05-10 61 views
14

我正在写哈斯克尔一些shell脚本,其中我在gitbash运行,但也有一些其他现有的脚本我希望能够从这些脚本中使用。例如,我想运行maven目标或做一个git pull,但不必专门与这些工具集成。是否可以从haskell程序调用bash或shell脚本?

有没有办法做到这一点?

回答

16

您可以使用System.Process。 例如,执行seq 1 10外壳命令:

> 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

当然。您可以先使用system来调用外部进程。

System.Process库中可以跨平台方式获得更复杂的管道和过程控制。

最后,您可以考虑将您的shell脚本移植到Haskell,via shell DSLs

8

是的,这是可能的。您可以使用process包,该包导出许多有用的功能。最简单的是System.Cmd.system,它可以在shell中运行一些应用程序,产生退出代码。

System.Process模块也提供了更高级的功能。通过该模块,您可以运行流程并以多种方式与其进行交流(输入管道,退出代码,等待流程停止,修改其环境等)。

相关问题