如何从 haskell 程序调用 bash 或 shell 脚本?

Posted

技术标签:

【中文标题】如何从 haskell 程序调用 bash 或 shell 脚本?【英文标题】:How to invoke bash or shell scripts from a haskell program? 【发布时间】:2012-05-19 04:18:59 【问题描述】:

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

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

有没有办法做到这一点?

【问题讨论】:

是的,并且是异步的 github.com/friedbrice/dotfiles/blob/master/bin/git-fetch.hs :-) 这能回答你的问题吗? Executing a system command in Haskell 【参考方案1】:

您可以使用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)

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

Turtle 是非常好的现代 haskell 库。

【讨论】:

以上是关于如何从 haskell 程序调用 bash 或 shell 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法知道用户如何从 bash 调用程序?

如何在 emacs - haskell 模式下运行 haskell 应用程序?

haskell 中的***可变变量

如何从 Bash 中的文件调用多个命令行参数?

-bash: ghci: 找不到命令(Haskell 交互式 shell,Haskell 安装)

如何在 Haskell 中提供屏幕图像作为程序的输入