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

     2023-02-19     19

关键词:

【中文标题】如何从 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 库。

【讨论】:

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

】如何从Bash中的文件调用多个命令行参数?【英文标题】:HowtocallseveralcommandlineargumentsfromafileinBash?【发布时间】:2020-03-2905:54:13【问题描述】:我有一个编译的C++程序需要2个命令行参数才能运行-例如,如果我的参数是“10”和... 查看详情

从 C# 调用 Haskell

...5-1300:16:17【问题描述】:我刚刚花了一周左右的时间研究如何从C#执行C++代码,作为我日常工作的一部分。我们花了很长时间才弄清楚,但最终的解决方案相当简单。现在我很好奇...有多难?(注意:这是调用Haskell来自C#,而不... 查看详情

如何从 Bash 脚本中检查程序是不是存在?

】如何从Bash脚本中检查程序是不是存在?【英文标题】:HowcanIcheckifaprogramexistsfromaBashscript?如何从Bash脚本中检查程序是否存在?【发布时间】:2010-10-1004:59:30【问题描述】:我将如何验证程序是否存在,以返回错误并退出或继... 查看详情

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

】如何在emacs-haskell模式下运行haskell应用程序?【英文标题】:Howtorunahaskellapplicationinemacs-haskellmode?【发布时间】:2012-07-2708:24:12【问题描述】:helloworld.hs中的代码:主要=做putStrLn"你好,你叫什么名字?"名称putStrLn("嘿"++name++",... 查看详情

从 Python 调用 Haskell 函数

】从Python调用Haskell函数【英文标题】:CallingHaskellfunctionsfromPython【发布时间】:2011-06-2806:39:48【问题描述】:我想使用Python中的一些Haskell库(例如Darcs、Pandoc),但Python中似乎没有直接的外部函数接口到Haskell。有什么办法吗?... 查看详情

如何从调用 bash 的 Tcl 脚本验证密码?

】如何从调用bash的Tcl脚本验证密码?【英文标题】:HowtoauthenticatepasskeyfromaTclscriptcallingbash?【发布时间】:2011-03-0206:11:23【问题描述】:我有一个tcl脚本,它从bash调用很多函数,包括ssh。我正在努力的部分如下所示:procconnectwhe... 查看详情

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

】如何在Haskell中提供屏幕图像作为程序的输入【英文标题】:Howtoserveanimageofthescreenasaninputtoaprogram,inHaskell【发布时间】:2011-06-1523:52:06【问题描述】:我想编写一个函数(我正在使用Haskell),它能够检索用户查看的屏幕的实际... 查看详情

如何从 Mac 上的 bash 脚本调用 ./snowsql 文件?

】如何从Mac上的bash脚本调用./snowsql文件?【英文标题】:Howtocall./snowsqlfilefromabashscriptonMac?【发布时间】:2019-12-1821:48:16【问题描述】:我正在尝试从bash脚本建立连接,完成类似于以下的操作:rmcguigan$snowsql--filenametest.sql*SnowSQL*v... 查看详情

Haskell:如何将 IO 输入字符串解析为 Float(或 Int 或其他)?

】Haskell:如何将IO输入字符串解析为Float(或Int或其他)?【英文标题】:Haskell:HowtoparseanIOinputstringintoaFloat(orIntorwhatever)?【发布时间】:2012-07-1322:37:48【问题描述】:我正在尝试制作一个程序,该程序接受用户通过键盘输入的浮... 查看详情

如何将执行命令从 bash 脚本转换为 C?或如何在“W”模式下正确使用 popen()?

】如何将执行命令从bash脚本转换为C?或如何在“W”模式下正确使用popen()?【英文标题】:HowtotranslateexecutioncommandsfrombashscripttoC?orHowtoproperlyusepopen()in"W"mode?【发布时间】:2011-02-0918:36:04【问题描述】:大家好。我正在尝... 查看详情

从 Rust 调用动态链接的 Haskell 代码

】从Rust调用动态链接的Haskell代码【英文标题】:CallingdynamicallylinkedHaskellcodefromRust【发布时间】:2015-09-2016:24:58【问题描述】:我正在尝试用一些Haskell代码编译一些Rust代码。我有一个测试系统设置了一个文件,Fibonacci.hs具有一... 查看详情

如何在 Haskell 中编写 MST 算法(Prim 或 Kruskal)?

】如何在Haskell中编写MST算法(Prim或Kruskal)?【英文标题】:HowcanIwriteaMSTalgorithm(PrimorKruskal)inHaskell?【发布时间】:2011-05-1611:10:39【问题描述】:我可以编写Prim和Kruskal的算法以在C++或Java中找到最小生成树,但我想知道如何在Hask... 查看详情

如何从类型重建 Haskell 表达式

】如何从类型重建Haskell表达式【英文标题】:HowtoreconstructHaskellexpressionfromtype【发布时间】:2013-09-1208:51:51【问题描述】:我正在编写一个程序,它针对给定的类型签名重构这种类型的Haskell表达式,例如:对于a->b->a... 查看详情

如何从 Git Bash 中将命令行参数传递给 Windows 应用程序?

】如何从GitBash中将命令行参数传递给Windows应用程序?【英文标题】:HowtopasscommandlineargumentstoaWindowsappfromwithintheGitBash?【发布时间】:2018-02-1400:46:09【问题描述】:我正在尝试在Windows上的GitBash中运行devenv。devenv接受/buildDebug或/pr... 查看详情

如何避免从 Bash 脚本中多次调用 Python 解释器?

】如何避免从Bash脚本中多次调用Python解释器?【英文标题】:HowcanIavoidcallingPythoninterpretermanytimesfromaBashscript?【发布时间】:2017-03-0904:15:56【问题描述】:我正在处理一个涉及两个主要组件的项目,一个带有Bash命令行界面,另一... 查看详情

如何避免从 Bash 脚本中多次调用 Python 解释器?

】如何避免从Bash脚本中多次调用Python解释器?【英文标题】:HowcanIavoidcallingPythoninterpretermanytimesfromaBashscript?【发布时间】:2017-03-0904:15:56【问题描述】:我正在处理一个涉及两个主要组件的项目,一个带有Bash命令行界面,另一... 查看详情

如何从 mfc 应用程序调用 IE 或任何其他浏览器?

】如何从mfc应用程序调用IE或任何其他浏览器?【英文标题】:HowtocallIEoranyotherbrowserfromamfcapplication?【发布时间】:2012-06-2217:13:48【问题描述】:我有一个html文件,我想从我的mfc应用程序中打开它,一种方法是shellexecute,它可以... 查看详情

Bash 脚本:如何确保脚本在使用“或”(||) 条件调用的函数中出现任何错误时退出?

】Bash脚本:如何确保脚本在使用“或”(||)条件调用的函数中出现任何错误时退出?【英文标题】:Bashscripting:Howtoensurescriptexitsonanyerrorinfunctioncalledwithan"or"(||)condition?【发布时间】:2019-08-1023:55:17【问题描述】:这是一个... 查看详情