25

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

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

有没有办法做到这一点?

4

4 回答 4

28

您可以使用System.Process. 例如执行seq 1 10shell命令:

> 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)
于 2012-05-10T14:54:30.690 回答
10

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

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

于 2012-05-10T14:58:05.407 回答
7

当然。您可以从使用system调用外部进程开始。

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

最后,您可以考虑通过 shell DSL将您的 shell 脚本移植到 Haskell 。

于 2012-05-10T14:55:14.953 回答
7

Turtle是非常好的现代 haskell 库。

于 2015-04-30T23:03:16.560 回答