2012-11-04 30 views
8

unix kabuk betiklerinde haskell işlevlerini kullanma olasılığı var mıdır? Örneğinhaskell ve Unix kabuk betimlemesi

:

Ben

sayesinde önceden argümanlar ve haskell fonksiyonlarının sonuçları gibi kabuk komut değişkenleri kullanmak istiyorum

#!/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 

... 

.

levye

+0

Benim örümcek duyu kolayca Haskell gelen kabuk gibi şeyler komut dosyası için bir paket yazma birileri hakkında oku ... ama bu konuda herhangi bir ayrıntı hatırlamıyorum söylüyor. :-( – MathematicalOrchid

+0

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

+0

@ dave4420 Evet, bu iyi olabilir ... – MathematicalOrchid

cevap

10

kullanımı the -e switch to ghc, ör Eğer ghci kullanarak komut dosyaları yazabilirsiniz, ayrıca

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 Bağlantı için teşekkürler, ben düzenledim. – dave4420

+0

Ben bilgi için teşekkür ederim, bu konuda bilmiyordum;) –

1

: Sadece ilk satırında #!/usr/bin/env runhaskell shebang koymak dize işleme için

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

, burada bash en dizeleri ile birlikte Haskell's interact kullanmak en iyisidir betik ve çalıştırılabilir hale getirin. Bu gibi betikler, her zamanki gibi sh/bash/ksh/csh/whatever komut dosyalarından çağrılabilir.

E.g.

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

main = putStrLn "Hello world!" 

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

Can/usr/bin/env'nin önemini bilen var mı? Ben bu özel komuta aşina değilim ... – MathematicalOrchid

+0

@MathematicalOrchid Bence bethaskell mutlak yoldan komut dosyasını bağımsız yapmak gerekiyor (/ usr/local/bin,/opt/local/bin ve diğer dizinlerde olabilir) garip yerler,/usr/bin içinde olduğunu varsaymak her zaman iyi değildir. –

+0

@MathematicalOrchid alıntılama http://en.wikipedia.org/wiki/Env: "Python yorumlayıcısının tam yolunu vererek tercümeyi env kullanmadan belirtmenin mümkün olduğunu unutmayın. farklı bilgisayar sistemleri, tam yol farklı olabilir. Bunun yerine örnekte olduğu gibi env kullanarak, yorumlayıcı aranır ve betiğin çalıştığı zamanda bulunur " –