私は自分自身にHaskellを教え始めました、そしてそのために私はインストールしました Haskellプラットフォーム Windows用。現在、WinGHCi
を使用しています。ディレクトリを変更するためのコマンド:cd
があることを知りました。しかし、問題は、現在どのディレクトリにいるのかをどうやって知ることができるかということです。それを最初に知らずに、なぜ私はディレクトリを変更したいのでしょうか。たくさん検索しましたが、答えが見つかりませんでした。
現在の作業ディレクトリを知る方法があるかどうか教えてください。 Linuxのコンソールのように、現在のディレクトリを表示するようにコマンドプロンプト自体を構成することをお勧めします。
@Danielの提案に従って、私はこれらを行いました:
.ghci
ファイルがないので(UnixライクなOS用だと思います)、ghci.conf
フォルダーにC:\Users\Apelles\AppData\Roaming\ghc
ファイルを作成しました ここで説明されています 。ghci.conf
にスクリプトをコピーして貼り付けました。ghci.exe
を起動しました。以前にロードしていたものよりも数少ないモジュールをロードしていることに気づきました。スナップショットは次のとおりです。ご覧のとおり、より多くのモジュールが読み込まれ、最後の行には次のように書かれています。
プロンプト文字列を解析できません。 Haskell構文を使用します。
どういう意味ですか?どの行が問題を引き起こしていますか(次のスクリプトから)?
let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set Prompt \"" ++ cwd ++ fill ++ " \""); }
:def doprompt (\_ -> cur ">")
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">")
:doprompt
また、ghci.conf
ファイルの名前をランダムな名前に変更してから、ghci.exe
を起動すると、次のモジュールがロードされます。
前に言ったように、ロードするモジュールの数が少なくなります。つまり、ghci.confを使用すると、ghci.exe
は正常に実行されますが、一部で失敗します。ポイント。それを修正する方法は?
System.Directory.getCurrentDirectory
これが「正しい」方法かどうかはわかりませんが、:!
はシェルコマンドを許可しますが、ディレクトリまたはコンテンツを読み取るための適切なシェルコマンド(OSの)を使用して取得することもできます(つまり、cd
、ls
など)。たとえば、次のように書くことができます。
:! cd
それはあなたが何のためにディレクトリを必要とするかによります。コンソールで印刷したいだけの場合は、これが役立ちます。
ではごきげんよう!
Ghciプロンプトを現在の作業ディレクトリに設定するための貧乏人の解決策は
let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set Prompt \"" ++ cwd ++ fill ++ " \""); }
:def doprompt (\_ -> cur ">")
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">")
:doprompt
.ghci
ファイル内。
最初の行では、現在のディレクトリを取得し、それに応じてプロンプトを設定するためにghciコマンドを返すcur :: String -> IO String
を定義します。次に、そのアクションを実行するghciコマンドdoprompt
と、ディレクトリを変更してプロンプトを設定するコマンドを定義します。最後の行は、起動時に:doprompt
を実行します。
残念ながら、それでは:cd dir
にディレクトリの変更が反映されないため、後で手動で:doprompt
を実行するか、:mycd
を使用してディレクトリを変更する必要があります。
プロンプトが長すぎるのを避けるために、ファイルパスの最初の部分を削除することでgetCurrentDirectory
の結果を操作できます。
この単純なアプローチのもう1つの欠点は、プロンプトにロードされたモジュールに関する情報が含まれなくなったことです。私はそれをすべて克服できると信じていますが、私は今掘り下げるのに十分な動機がありません。
Ghciコマンドプロンプトタイプ:! cd
で、現在のディレクトリの出力が表示されます。一般に、:!
の後にシェルコマンドを使用して、ghciコマンドプロンプトでシェルコマンドを実行します。シェルはWindowsとMac/Linuxで異なるため、使用できるコマンドは異なります。