用程序检查可执行文件是否存在,而不运行它或使用"which"



我们可以在System.Process.proc的帮助下运行进程foo,如下所示:

createProcess $ proc "foo" []

然而,我们还不知道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"

相关内容

最新更新