2012-05-10 119 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模塊也提供了更高級的功能。通過該模塊,您可以運行流程並以多種方式與其進行交流(輸入管道,退出代碼,等待流程停止,修改其環境等)。

相關問題