У меня есть скрипт на Haskell, который запускается через строку shebang с использованием утилиты runhaskell
. Например ...
#! /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, используя ту же технику или иным образом.