Как определить каталог в который рабочие жизни сценария или приложения Haskell?

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

10
задан Chris W. 26 July 2010 в 18:20
поделиться

2 ответа

Существует пакет FindBin , который, кажется, соответствует вашим потребностям, а также работает для скомпилированных программ.

7
ответ дан 3 December 2019 в 19:31
поделиться

Насколько я понимаю, в * nix это исторически сложнее. Существуют библиотеки для некоторых языков, обеспечивающие такое поведение, включая FindBin для Haskell:

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

Я не уверен, что это будет сообщать с помощью сценария. Вероятно, расположение двоичного файла, который runhaskell скомпилировал непосредственно перед его выполнением.

Кроме того, для скомпилированных проектов Haskell система сборки Cabal предоставляет каталог данных и файлы данных, а также соответствующие сгенерированные Paths_ .hs для поиска установленных файлов вашего проекта во время выполнения.

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

8
ответ дан 3 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: