2012-11-04 26 views
8

UNIXシェルスクリプトでhaskell関数を使用する可能性はありますか?例えばhaskellとUnixシェルスクリプト

私は

おかげで、事前に引数と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 

... 

ジミー

+0

マイクモセンス、私は簡単にハスケルから殻のようなもののスクリプトを作成するために、パッケージを書く誰かについて読ん...しかし、私はそれについての詳細を思い出すことができないと言われます。 :-( – MathematicalOrchid

+0

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

+0

@ dave4420うん、そうかもしれない... – MathematicalOrchid

答えて

10

使用the -e switch to ghc、例えばあなたはghciを使用してスクリプトを書くことができ、また

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

: ちょうどの最初の行で#!/usr/bin/env runhaskellシェバング置く文字列処理のために

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

が、それはここではbashの文字列と一緒にHaskell's interactを使用するのが最適ですスクリプトを実行可能にします。このようなスクリプトは、いつものようにsh/bash/ksh/csh/whateverのスクリプトから呼び出すことができます。

など。

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

main = putStrLn "Hello world!" 

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

Can誰でも '/ usr/bin/env'の意義を説明していますか?私はその特定のコマンドには慣れていません... – MathematicalOrchid

+0

@MathematicalOrchidスクリプトを 'runhaskell'絶対パスから独立させる必要があると思います(/ usr/local/bin、/ opt/local/binなどにあります)変わった場所、/ usr/binにあると仮定するのは必ずしも良いとは限りません)。 –

+0

@MathematicalOrchid引用http://en.wikipedia.org/wiki/Env: "envを使わずにインタプリタを指定することは可能ですが、Pythonインタプリタの完全なパスを与えることで可能です。別のコンピュータシステムでは、正確なパスが異なる可能性があります。例のようにenvを使用すると、インタプリタは検索され、スクリプトの実行時に " –

関連する問題