2012-03-01 30 views
2

我的程序允许用户指定一个文件作为输入读取,但这是可选的。如果用户没有指定文件,我想从命令行读入输入。如何使用getContents从命令行获取输入?

我有这个至今:

main :: IO() 
main = do 
    (opts, mbArgs) <- parseCmdLine 
    input <- 
    case mbArgs of 
     Nothing -> getContents 
     Just file -> readFile file 

这似乎并不奏效。当用户不规定文件时,他们可以输入输入,但似乎没有办法终止,因此程序可以处理该输入。

我以为你不得不按Ctrl + D,但是什么也没有做。

感谢您的任何帮助。

+1

您使用Windows,Mac或Linux?它取决于终端使用哪个键序列来插入“文件结束”字符。 – dflemstr 2012-03-01 01:09:15

+0

我在Windows上使用Cygwin ...只是为了混淆你。 – 2012-03-01 01:16:29

+1

使用Ctrl-Z和Enter代替Ctrl-D,它适用于Cygwin。 – 2012-03-01 10:29:26

回答

7

在一个典型的类Unix终端(如Cygwin的,至少在Cygwin的rxvt;关于Windows命令提示符不知道),一个按Ctrl + d只有当你发送EOF在开始一条线。如果您点击输入,然后Ctrl + D,它应该工作。如果要发送EOF而不换行,请按Ctrl + D连续两次。

如果不是这样,那么你的终端可能还有其他一些问题;代码看起来很好。

+3

IIRC,在Windows命令提示符下,它是“Ctrl + Z”,后面跟着“Enter”。我不记得它是否必须在一行的开头。 – hammar 2012-03-01 02:32:06

+1

我可以确认它必须在新的一行上。 – 2012-03-01 20:51:32

+0

Ctrl-Z后跟Enter可以在Windows终端中运行Cygwin bash。使用Mintty这不起作用,至少不在默认配置中。我无法让Mintty与上述任何建议一起工作。任何想法? – esquifit 2014-02-06 17:55:19

相关问题