首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Haskell中运行sudo命令

在Haskell中运行sudo命令
EN

Stack Overflow用户
提问于 2011-07-20 23:34:08
回答 3查看 2K关注 0票数 8

我的笔记本电脑上安装了ghc 6.12.3和Ubuntu 11.04。

我希望有一个函数,它接受一些shell命令并以超级用户身份执行它们(如sudo update-manager,sudo iwlist....)在哈斯克尔。我知道System.Process模块有一些像createProcess,runInteractiveCommand这样的函数。但是,它适用于单个原始命令或单个shell命令,而不适用于像"sudo update-manager“这样的复合命令。我在这些函数上做的所有实验都是为了执行"sudo ...“失败。我用来运行haskell函数的终端没有响应。

我还查看了HSH包。但在我看来,在那里导出的函数对sudo命令也不好。

我猜测执行像"sudo update-manager“这样的命令需要两个过程。一个是"sudo“,另一个是"update-manager”。因此,我需要调用两次像"createProcess“这样的函数,并以某种方式将它们连接起来,以便"update-manager”的第二个进程从"sudo“的第一个进程获得超级用户权限。

提前感谢您的帮助!

EN

回答 3

Stack Overflow用户

发布于 2011-07-20 23:47:57

System.Process试用readProcess

readProcess ::FilePath --运行->字符串的命令--任何参数->字符串--标准输入-> IO字符串-- stdout

readProcess派生一个外部进程,严格读取其标准输出,阻塞直到该进程终止,然后返回输出字符串。

像这样运行它:

代码语言:javascript
复制
readProcess "/usr/bin/sudo" ("-S":someProgram) (passwort++"\n")

这将使用选项-S和程序执行sudo。需要-S才能从标准输入中读取密码。密码必须以换行符结束,所以程序会添加一个。

票数 13
EN

Stack Overflow用户

发布于 2011-07-21 00:09:34

回答最后一段。sudo是一个常规的程序,没有任何魔力。它只是碰巧在运行其他程序。您的Haskell程序也是如此。您的程序运行sudo,而sudo运行update-manager,所以不应该创建两个进程。

票数 8
EN

Stack Overflow用户

发布于 2011-07-20 23:43:24

你试过System.Process.system吗?

代码语言:javascript
复制
import System.Process

main = system "sudo update-manager"

这适用于我(GHC 7.0.3)。此外,对于一般的Haskell脚本(包括sudo),您可以查看Don Stewart的演示文稿"Practical Haskell: scripting with types"

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6764516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档