Tengo un script Haskell que se ejecuta a través de una línea shebang haciendo uso de la utilidad runhaskell
. Por ejemplo ...¿Cómo se determina el directorio en el que se ejecuta una secuencia de comandos o aplicación Haskell?
#! /usr/bin/env runhaskell
module Main where
main = do { ... }
Ahora, me gustaría ser capaz de determinar el directorio en el que reside la escritura desde el script, en sí. Entonces, si el script vive en /home/me/my-haskell-app/script.hs
, debería poder ejecutarlo desde cualquier lugar, usando una ruta relativa o absoluta, y debería saber que está ubicado en el directorio /home/me/my-haskell-app/
.
Pensé que la funcionalidad disponible en el módulo System.Environment
podría ayudar, pero se quedó un poco corta. getProgName
no parece proporcionar información útil de ruta de archivo. Encontré que la variable de entorno _
(que es un guión bajo) sería a veces contiene la ruta de acceso del guión, tal como se invocó; sin embargo, tan pronto como se invoca el script a través de otro programa o script primario, esa variable de entorno parece perder su valor (y necesito invocar mi script Haskell desde otra aplicación principal).
También es útil saber si puedo determinar el directorio en el que vive un ejecutable Haskell precompilado, utilizando la misma técnica o de otro modo.
El paquete FindBin parece funcionar bien también para los scripts basados en runhaskell. –