runhaskell
ユーティリティを利用してシバン行を介して実行される Haskell スクリプトがあります。例えば..
#! /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 実行可能ファイルが存在するディレクトリを特定できるかどうかも知っておくと役立ちます。