我有一个 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 可执行文件所在的目录。