是否可以从haskell程序调用bash或shell脚本?

时间:2012-05-10 14:50:53

标签: shell haskell ffi

我正在编写一些带有haskell的shell脚本,我正在gitbash中运行,但是我希望能够从这些脚本中使用其他一些现有的脚本。

例如,我想运行maven目标或做一个git pull,但不必专门与这些工具集成。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:21)

您可以使用System.Process。 例如,执行seq 1 10 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)

答案 1 :(得分:9)

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

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

答案 2 :(得分:5)

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

System.Process库以跨平台方式提供更复杂的管道和过程控制。

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