2012-11-04 30 views
8

có khả năng nào để sử dụng các hàm haskell trong các tập lệnh shell unix không?haskell và Unix shell scripting

ví dụ:

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

... 

Tôi muốn sử dụng các biến trong kịch bản shell như các đối số và kết quả của các chức năng Haskell

Cảm ơn trước.

jimmy

+0

Ý thức về nhện của tôi cho tôi biết tôi đã đọc một ai đó viết một gói để dễ dàng viết các nội dung giống như vỏ từ Haskell ... nhưng tôi không thể nhớ bất kỳ chi tiết nào về nó. :-( – MathematicalOrchid

+0

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

+0

@ dave4420 Vâng, đó cũng có thể là ... – MathematicalOrchid

Trả lời

10

Sử dụng the -e switch to ghc, ví dụ:

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

Đối xử lý chuỗi, nó là tốt nhất để sử dụng Haskell's interact kết hợp với của bash đây chuỗi:

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 Cảm ơn bạn đã liên kết, tôi đã chỉnh sửa nó. – dave4420

+0

Tôi cảm ơn thông tin, không biết về điều này;) –

1

Ngoài ra, bạn có thể viết kịch bản sử dụng ghci: Chỉ cần đặt công việc #!/usr/bin/env runhaskell tại dòng đầu tiên của kịch bản và làm cho nó thực thi được. Các tập lệnh như vậy có thể được gọi từ các tập lệnh sh/bash/ksh/csh/whatever như bình thường.

Ví dụ:

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

main = putStrLn "Hello world!" 

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

Có thể ai giải thích ý nghĩa của '/ usr/bin/env'? Tôi không quen thuộc với lệnh cụ thể đó ... – MathematicalOrchid

+0

@MathematicalOrchid Tôi nghĩ rằng nó cần thiết để làm cho tập lệnh độc lập với đường dẫn tuyệt đối 'runhaskell' (nó có thể nằm trong/usr/local/bin,/opt/local/bin và các những nơi kỳ lạ, nó không phải là luôn luôn tốt để giả sử nó được trong/usr/bin). –

+0

@MathematicalOrchid quoting http://en.wikipedia.org/wiki/Env: "Lưu ý rằng có thể chỉ định trình thông dịch mà không sử dụng env, bằng cách cho đường dẫn đầy đủ của trình thông dịch python. Một vấn đề với cách tiếp cận đó là trên các hệ thống máy tính khác nhau, đường dẫn chính xác có thể khác nhau. Bằng cách thay vì sử dụng env như trong ví dụ, trình thông dịch được tìm kiếm và đặt tại thời điểm tập lệnh được chạy " –

Các vấn đề liên quan