У меня есть сценарий 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, используя ту же технику или иначе.