我正在尝试运行用 Haskell 编写的 elm-reactor 项目。它失败了,因为它试图elm
像这样执行命令:
createProcess (proc "elm" $ args fileName)
我的 elm 可执行文件位于 ~/.cabal/bin 中,它位于我的 PATH 中。
该System.Process.proc
命令在 $PATH 中搜索其命令参数,但它不执行波浪号 (~) 扩展,因此它找不到 elm。
System.Process.shell
有相反的问题。它会进行波浪扩展,但显然不会搜索 $PATH。
从 System.Process 命令的源代码来看,看起来大多数事情都依赖于对“runInteractiveProcess”的外部 ccall,我假设它正在执行任何 $PATH 搜索。我不知道 runInteractiveProcess 的来源在哪里,而我的 C 语言已经生锈了大约 15 年。
我可以通过以下方式解决此问题
a) 将完全扩展的 cabal/bin 路径添加到我的 PATH 或
b) 符号链接elm
到其在 cabal/bin 中的位置。
但是,我想为 elm 项目提供一个建议的修复,以节省未来的采用者我所经历的麻烦。有没有我没试过的System.Process
电话,他们应该在这里打?还是他们应该使用不同的方法?我想在最坏的情况下他们可以getEnv
为 PATH 和 HOME,并在调用 proc 之前使用它来实现他们自己的文件搜索——但这会破坏跨平台兼容性。还有其他建议吗?