我正在寫哈斯克爾一些shell腳本,其中我在gitbash運行,但也有一些其他現有的腳本我希望能夠從這些腳本中使用。例如,我想運行maven目標或做一個git pull,但不必專門與這些工具集成。是否可以從haskell程序調用bash或shell腳本?
有沒有辦法做到這一點?
我正在寫哈斯克爾一些shell腳本,其中我在gitbash運行,但也有一些其他現有的腳本我希望能夠從這些腳本中使用。例如,我想運行maven目標或做一個git pull,但不必專門與這些工具集成。是否可以從haskell程序調用bash或shell腳本?
有沒有辦法做到這一點?
您可以使用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)
當然。您可以先使用system來調用外部進程。
從System.Process庫中可以跨平臺方式獲得更復雜的管道和過程控制。
最後,您可以考慮將您的shell腳本移植到Haskell,via shell DSLs。
是的,這是可能的。您可以使用process
包,該包導出許多有用的功能。最簡單的是System.Cmd.system
,它可以在shell中運行一些應用程序,產生退出代碼。
System.Process
模塊也提供了更高級的功能。通過該模塊,您可以運行流程並以多種方式與其進行交流(輸入管道,退出代碼,等待流程停止,修改其環境等)。
Turtle是相當不錯的現代haskell庫。