我们可以在以下foo帮助下运行流程System.Process.proc:
createProcess $ proc "foo" []
Run Code Online (Sandbox Code Playgroud)
但是我们提前知道是否foo可以找到.我们可以运行它并捕获异常,但这很糟糕.我们也可以先打电话,which但也很糟糕.在process图书馆中我们发现RawCommand了截至今天所说的内容
FilePath参数命名可执行文件,并根据平台搜索可执行文件的标准策略进行解释.特别:
在Unix系统上使用execvp(3)语义,如果可执行文件名不包含斜杠(/),则在PATH环境变量中搜索可执行文件.
在Windows系统上使用Win32 CreateProcess语义.简而言之:如果文件名不包含路径,则搜索包含父可执行文件的目录,然后搜索当前目录,然后搜索一些标准位置,最后搜索当前PATH.如果文件名尚未具有扩展名,则添加.exe扩展名.有关完整详细信息,请参阅Windows SearchPath API的文档.
这正是我想要做的,但似乎没有任何暴露的功能.我只是错过了它,是否有更规范/更好的方式,还是我必须通过process内部挖掘?解决方案应该是可移植的(Windows/Linux).
看起来你想要这里的findExecutable功能。
Prelude System.Directory> findExecutable "gcc"
Just "/usr/bin/gcc"
Run Code Online (Sandbox Code Playgroud)