【发布时间】:2018-06-24 15:48:10
【问题描述】:
今天我试图制作一个程序,其中文件的内容将被读取为 Haskell 程序的输入,如下所示:
module Main where
import System.Posix.Env.ByteString (getArgs)
main :: IO ()
main = do
info <- getArgs
print info
如果我像这样直接发送(字节)字符串,它会起作用:
> runhaskell Main.hs example
["example"]
但是,如果我尝试将一个命令的输出“通过管道”传输到该程序,我会得到一个空响应,如下所示:
> echo example | runhaskell Main.hs
[]
即使我编译程序,使用 getArgs 的字符串版本,用特殊的 bash 变量如 $!或类似的。我发现的唯一方法是这样做:
> runhaskell Main.hs $(echo example)
["example"]
这不是本意,“管道”几个命令有点烦人。
有没有人有改进的版本或“getArgs”不适用于管道的原因??
谢谢
【问题讨论】:
-
管道到标准输入。
-
你的程序没什么特别的;
echo example打印example;但echo example | echo什么也不打印。
标签: bash haskell functional-programming command-line-arguments