【问题标题】:When writing a haskell script, get syntax error near unexpected token编写 haskell 脚本时,出现意外标记附近的语法错误
【发布时间】:2014-09-17 11:05:46
【问题描述】:

当我编写一个简单的脚本并将其传递给 runhaskell 时,它工作正常,但当我添加一个 shebang 并尝试直接执行它时就不行了。脚本是这样的:

#!/usr/local/bin/runhaskell

import Data.List (intercalate)

main :: IO ()
main = putStrLn $ intercalate " " $ map show [1..10]

如果我尝试$ runhaskell count.hs bash 按预期打印1 2 3 4 5 6 7 8 9 10,但如果我尝试./count.hs 我会收到以下错误:

./count.hs: line 3: syntax error near unexpected token `('
./count.hs: line 3: `import Data.List (intercalate)'

这个错误是源自 bash 还是 runhaskell?我该如何解决?

【问题讨论】:

  • 这是runhaskell 的正确路径吗?因为那看起来确实像一个 shell 错误。 runhaskell 本身是带有shebang 的脚本吗?这是什么系统/操作系统?

标签: bash shell haskell scripting


【解决方案1】:

尝试使用:

#!/usr/bin/env runhaskell
...

注意:这是 OSX 的一个功能/问题,其中 shebang 解释器必须是二进制文件。详情请见Shebang pointing to script (also having shebang) is effectively ignored

【讨论】:

  • 谢谢,成功了。但为什么?我做了which runhaskell 来获取路径,并在bash 中运行/usr/local/bin/runhaskell count.hs 工作正常。为什么它在shebang中不起作用?
  • 不确定,但您的代码在我的两个 Linux 系统上都可以正常工作(Debian 与 GHC 7.4 和 Arch 与 GHC 7.8)。
  • @RamithJayatilleka 我敢打赌这与runhaskell 是一个调用ghc 并带有一些参数的shell 脚本有关。
  • 添加了有关 OSX 行为的信息。
猜你喜欢
  • 2018-07-28
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 2017-12-03
相关资源
最近更新 更多