是否可以使用 Heredoc 将参数传递给 `runhaskell`?

问题描述 投票:0回答:1

我想将字符串“Hello World”传递给以下 Haskell 脚本:

main :: IO ()
main = interact id

位于 Heredoc 内。这可能吗?

我做了一个最小的可复制示例(目前不起作用):

#!/bin/bash
echo "Hello World" | runhaskell <<HASKELL_END 2>/dev/null
main :: IO ()
main = interact id
shell haskell heredoc runhaskell
1个回答
0
投票

你用zsh没问题就可以了

#!/bin/zsh
echo "Hello World" | runghc =(cat <<'HASKELL_END'
main :: IO ()
main = interact id
HASKELL_END
)

#!/bin/zsh
echo "Hello World" | runghc =(<<<'
main :: IO ()
main = interact id'
)

问题是,您需要将源代码作为文件传递,因为

interact
关闭标准输入。不幸的是,bash 中的进程替换效果不佳,因为 ghc 试图获取命名管道的大小。

所以这行不通。

#!/bin/bash
echo "Hello World" | runghc <(cat <<HASKELL_END
main :: IO ()
main = interact id
HASKELL_END
)

它给出了这个错误。

*** Exception: /dev/fd/63: hFileSize: inappropriate type (not a regular file)
© www.soinside.com 2019 - 2024. All rights reserved.