2012-11-04 68 views
8

Esiste la possibilità di utilizzare le funzioni haskell negli script di shell unix?haskell e script di shell Unix

per esempio:

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

... 

voglio usare le variabili in script di shell come argomenti ed i risultati delle funzioni Haskell

Grazie in anticipo.

jimmy

+0

Il mio senso di ragno mi dice ho letto di qualcuno a scrivere un pacchetto per lo scripting facile roba conchiglia da Haskell ... ma non riesco a ricordare alcun dettaglio su di esso. :-( – MathematicalOrchid

+0

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

+0

@ dave4420 Sì, potrebbe essere ... – MathematicalOrchid

risposta

10

Uso the -e switch to ghc, ad esempio

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

Per l'elaborazione delle stringhe, è meglio usare Haskell's interact in combinazione con bash è qui stringhe:

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 Grazie per il collegamento, l'ho modificato in. – dave4420

+0

Ringrazio per le informazioni, non lo sapevo;) –

1

Inoltre, è possibile scrivere script utilizzando ghci: Basta mettere la baracca #!/usr/bin/env runhaskell alla prima linea di lo script e renderlo eseguibile. Tali script possono essere chiamati dagli script sh/bash/ksh/csh/whatever come al solito.

E.g.

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

main = putStrLn "Hello world!" 

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

Latta qualcuno spiega il significato di/usr/bin/env'? Non ho familiarità con quel particolare comando ... – MathematicalOrchid

+0

@MathematicalOrchid Penso che sia necessario rendere lo script indipendente dal percorso assoluto 'runhaskell' (potrebbe trovarsi in/usr/local/bin,/opt/local/bin e altro luoghi strani, non è sempre bene presumere che sia in/usr/bin). –

+0

@MathematicalOrchid citando http://en.wikipedia.org/wiki/Env: "Si noti che è possibile specificare l'interprete senza utilizzare env, dando il percorso completo dell'interprete python. Un problema con tale approccio è che su diversi sistemi informatici, il percorso esatto potrebbe essere diverso: utilizzando invece env come nell'esempio, l'interprete viene cercato e localizzato nel momento in cui viene eseguito lo script " –