Ho uno script Haskell che viene eseguito tramite una linea shebang che utilizza l'utilità runhaskell
. Per esempio ...Come determinare la directory in cui risiede uno script Haskell o un'applicazione in esecuzione?
#! /usr/bin/env runhaskell
module Main where
main = do { ... }
Ora, mi piacerebbe essere in grado di determinare la directory in cui risiede lo script all'interno dello script, in sé. Quindi, se la sceneggiatura risiede in /home/me/my-haskell-app/script.hs
, dovrei essere in grado di eseguirlo da qualsiasi luogo, utilizzando un percorso relativo o assoluto, e dovrebbe sapere che si trova nella directory /home/me/my-haskell-app/
.
Ho pensato che la funzionalità disponibile nel modulo System.Environment
potrebbe essere di aiuto, ma è stata un po 'corta. getProgName
non sembra fornire utili informazioni sul percorso del file. Ho trovato che la variabile di ambiente _
(che è un trattino basso) a volte contiene il percorso dello script, come è stato richiamato; tuttavia, non appena lo script viene richiamato tramite un altro programma o script genitore, quella variabile d'ambiente sembra perdere il suo valore (e ho bisogno di invocare il mio script Haskell da un'altra applicazione madre).
Inoltre, è utile sapere se posso determinare la directory in cui risiede un eseguibile Haskell precompilato, utilizzando la stessa tecnica o altrimenti.
Il pacchetto FindBin sembra funzionare correttamente anche per gli script basati su runhaskell. –