2012-11-04 15 views
8

Czy istnieje możliwość użycia funkcji haskell w skryptach powłoki uniksowej?Skrypty powłoki haskell i uniksowej

na przykład:

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

... 

chcę używać zmiennych w skryptach powłoki jako argumentów i wyników funkcji Haskell

Dzięki z góry.

Jimmy

+0

Moja Spider-rozsądek mówi mi, czytam o kimś pisze pakiet za łatwo skryptów shell-jak rzeczy z Haskell ... ale nie mogę sobie przypomnieć żadnych szczegółów na ten temat. :-( – MathematicalOrchid

+0

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

+0

@ dave4420 Tak, może to być ... – MathematicalOrchid

Odpowiedz

10

Zastosowanie the -e switch to ghc np

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

Do przetwarzania ciąg, to najlepiej używać Haskell's interact w połączeniu z bash tu strun:

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 Dzięki za link, edytowałem go. – dave4420

+0

Dziękuję za informację, nie wiedziałem o tym;) –

1

Można także pisać skrypty za pomocą ghci: Wystarczy umieścić shebang #!/usr/bin/env runhaskell na pierwszej linii skrypt i sprawiają, że jest on wykonywalny. Takie skrypty można zwykle wywoływać ze skryptów 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

Can ktoś wyjaśnić znaczenie '/ usr/bin/env'? Nie jestem zaznajomiony z tym konkretnym poleceniem ... – MathematicalOrchid

+0

@MathematicalOrchid Myślę, że konieczne jest uczynienie skryptu niezależnym od ścieżki "runhaskell" (może to być/usr/local/bin,/opt/local/bin i inne dziwne miejsca, nie zawsze dobrze jest założyć, że jest w/usr/bin). –

+0

@ MathematicalOrchid cytowanie http://en.wikipedia.org/wiki/Env: "Zauważ, że można określić interpreter bez użycia env, podając pełną ścieżkę interpretera python. Problem z tym podejściem polega na tym, że na różne systemy komputerowe, dokładna ścieżka może być inna, zamiast tego używając env jak w przykładzie, interpreter jest wyszukiwany i zlokalizowany w momencie uruchomienia skryptu " –

Powiązane problemy