【问题标题】:haskell and Unix shell scriptinghaskell 和 Unix shell 脚本
【发布时间】:2012-11-04 19:30:59
【问题描述】:

有没有可能在 unix shell 脚本中使用 haskell 函数?

例如:

#!/bin/bash

...
var1=value
...

# use haskell function with input from shell variable var1
# and store the result into another shell variable var2

var2=haskellFunction $var1

...

我想在 shell 脚本中使用变量作为 haskell 函数的参数和结果

提前致谢。

吉米

【问题讨论】:

  • 我的蜘蛛感觉告诉我,我读到有人写了一个包,用于轻松编写来自 Haskell 的类似 shell 的东西的脚本......但我不记得它的任何细节。 :-(
  • @MathematicalOrchid Shelly?
  • @dave4420 是的,可能就是这样......

标签: shell unix haskell scripting interaction


【解决方案1】:

使用the -e switch to ghc,例如

var2=$(ghc -e "let f x = x*x + x/2 in f $var1")

对于字符串处理,最好结合bash的这里字符串使用Haskell's interact

var2=$(ghc -e 'interact reverse' <<<$var1)

【讨论】:

    【解决方案2】:

    另外,您可以使用ghci 编写脚本: 只需将 shebang #!/usr/bin/env runhaskell 放在脚本的第一行并使其可执行。可以像往常一样从sh/bash/ksh/csh/whatever 脚本调用此类脚本。

    例如

    $ cat > hello.hsh
    #!/usr/bin/env runhaskell
    
    main = putStrLn "Hello world!"
    
    $ chmod +x hello.hsh
    $ ./hello.hsh
    Hello world!
    $
    

    【讨论】:

    • 谁能解释/usr/bin/env的意义?我不熟悉那个特定的命令...
    • @MathematicalOrchid 我认为需要使脚本独立于runhaskell 绝对路径(它可能在/usr/local/bin、/opt/local/bin 和其他奇怪的地方,它是假设它在 /usr/bin 中并不总是好的)。
    • @MathematicalOrchid 引用en.wikipedia.org/wiki/Env :“请注意,通过给出python解释器的完整路径,可以在不使用env的情况下指定解释器。这种方法的一个问题是在不同的计算机系统上, 确切的路径可能不同。通过在示例中使用 env 代替,解释器在脚本运行时被搜索并定位"