我有一个Haskell脚本,通过使用该runhaskell实用程序的shebang线运行.例如..
#! /usr/bin/env runhaskell
module Main where
main = do { ... }
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够从脚本本身确定该脚本所在的目录.因此,如果脚本存在/home/me/my-haskell-app/script.hs,我应该能够使用相对或绝对路径从任何地方运行它,它应该知道它位于/home/me/my-haskell-app/目录中.
我认为System.Environment模块中可用的功能可能会有所帮助,但它有点短暂. getProgName似乎没有提供有用的文件路径信息.我发现环境变量_(这是一个下划线)有时会包含脚本的路径,因为它被调用了; 但是,只要通过其他程序或父脚本调用脚本,该环境变量似乎就会失去其值(我需要从另一个父应用程序调用我的Haskell脚本).
同样有用的是我是否可以使用相同的技术或其他方式确定预编译的Haskell可执行文件所在的目录.