2012-11-04 144 views
8

有沒有可能在unix shell腳本中使用haskell函數?haskell和Unix shell腳本

例如:

#!/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函數結果變量提前

感謝。

+0

我的蜘蛛感知告訴我,我讀過關於編寫一個軟件包以輕鬆編寫來自Haskell的shell類的東西的軟件包......但我不記得任何細節。 :-( – MathematicalOrchid

+0

@MathematicalOrchid [Shelly](http://hackage.haskell.org/package/shelly)? – dave4420

+0

@ dave4420是的,那可能就是它... – MathematicalOrchid

回答

10

使用the -e switch to ghc,例如

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

對於字符串處理,最好是結合使用Haskell's interact與bash的位置字符串:

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

http://www.haskell.org/ghc /docs/7.4.1/html/users_guide/modes.html#eval-mode –

+0

@KarolyHorvath感謝您的鏈接,我已經編輯它。 – dave4420

+0

我感謝信息,不知道這個;) –

1

此外,您還可以使用ghci編寫腳本: 只要把家當#!/usr/bin/env runhaskell在第一線該腳本並使其可執行。像往常一樣,可以從sh/bash/ksh/csh/whatever腳本調用這樣的腳本。

E.g.

$ cat > hello.hsh 
#!/usr/bin/env runhaskell 

main = putStrLn "Hello world!" 

$ chmod +x hello.hsh 
$ ./hello.hsh 
Hello world! 
$ 
+0

可以有人解釋'/ usr/bin/env'的意義嗎?我不熟悉那個特別的命令... – MathematicalOrchid

+0

@MathematicalOrchid我認爲它需要獨立於'runhaskell'絕對路徑(它可能在/ usr/local/bin,/ opt/local/bin和其他奇怪的地方,假設它在/ usr/bin中並不總是好的)。 –

+0

@MathematicalOrchid引用http://en.wikipedia.org/wiki/Env:「請注意,可以通過給出python解釋器的完整路徑來指定解釋器而不使用env。該方法的問題在於:不同的計算機系統,確切的路徑可能是不同的,通過代替使用env,就像在這個例子中那樣,在腳本運行時搜索並找到解釋器「 –