我已经开始自学Haskell,并为此安装了Haskell平台 for Windows。我现在正在使用WinGHCi
。我了解到它有用于更改目录的命令:cd
。但问题是,我如何知道我目前在哪个目录中?不知道这一点,首先我为什么要改变目录。我找了很多遍,但找不到答案。
请告诉我是否有方法知道当前的工作目录。最好将命令提示符本身配置为显示当前目录,就像Linux的控制台一样。
按照丹尼尔的建议,我做到了以下几点:
.ghci
文件(我认为它适用于类似Unix的操作系统),所以我在C:\Users\Apelles\AppData\Roaming\ghc
文件夹中创建了一个文件ghci.conf
,名为这里有指示。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
成功地完成了一些任务,但在某个时候失败了。怎么解决这个问题?
发布于 2014-02-27 16:50:15
System.Directory.getCurrentDirectory
来自directory
包。
发布于 2012-06-29 13:55:37
穷人将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
文件中。
在第一行中,我们定义了cur :: String -> IO String
,它获取当前目录并返回ghci命令以相应地设置提示符。然后,我们定义了一个执行该操作的ghci命令doprompt
和一个更改目录并设置提示符的命令。最后一行在启动时执行:doprompt
。
不幸的是,这并不能使:cd dir
反映目录的变化,因此必须随后执行手动:doprompt
,或者使用:mycd
来更改目录。
为了避免太长的提示,您可以通过删除文件路径的初始部分来操作getCurrentDirectory
的结果。
这种简单方法的另一个缺点是提示符不再包含已加载模块的信息。我相信所有这些都是可以克服的,但我现在还没有足够的动力去挖掘。
发布于 2019-03-14 10:45:43
在ghci命令提示符中,输入:! cd
,它将为当前目录提供输出。通常,在ghci命令提示符中,使用:!
后跟shell命令来运行任何shell命令。在Windows和Mac/Linux上,shell是不同的,所以您可以使用的命令是不同的。
https://stackoverflow.com/questions/11250262
复制相似问题