gpt4 book ai didi

haskell - 如何确定正在运行的 Haskell 脚本或应用程序所在的目录?

转载 作者:行者123 更新时间:2023-12-02 08:08:47 25 4
gpt4 key购买 nike

我有一个 Haskell 脚本,它使用 runhaskell 实用程序通过 shebang 线运行。例如...

#! /usr/bin/env runhaskell
module Main where
main = do { ... }

现在,我希望能够从脚本本身中确定该脚本所在的目录。。因此,如果脚本位于 /home/me/my-haskell-app/script.hs 中,我应该能够使用相对或绝对路径从任何地方运行它,并且它应该知道它位于 /home/me/my-haskell-app/ 目录中。

我认为 System.Environment 模块中提供的功能可能会有所帮助,但它有点不足。 getProgName 似乎没有提供有用的文件路径信息。我发现环境变量 _ (这是一个下划线)有时会包含脚本被调用时的路径;但是,一旦通过其他程序或父脚本调用该脚本,该环境变量似乎就会失去其值(并且我需要从另一个父应用程序调用我的 Haskell 脚本)。

同样有用的是我是否可以使用相同的技术或其他技术来确定预编译的 Haskell 可执行文件所在的目录。

最佳答案

据我了解,这在 *nix 中历来是很棘手的。有些语言的库可以提供这种行为,包括 Haskell 的 FindBin:

http://hackage.haskell.org/package/FindBin

我不确定脚本会报告什么。可能是 runhaskell 在执行之前编译的二进制文件的位置。

此外,对于已编译的 Haskell 项目,Cabal 构建系统提供了数据目录和数据文件以及相应生成的 Paths_<yourproject>.hs用于在运行时查找项目的已安装文件。

http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#paths-module

关于haskell - 如何确定正在运行的 Haskell 脚本或应用程序所在的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3337730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com