是否有可能获得Haskell可执行文件以将值返回给调用它的bash脚本?

时间:2018-08-25 22:10:52

标签: bash haskell

我有一个bash脚本调用Haskell可执行文件,是否可以让Haskell exe返回一个值以使其可以存储为bash变量?

例如,假设我有两个文件:haskellFile.hsBashScript

(1)我像这样ghc -o exe haskellFile.hs

编译haskell文件。

(2)在我的BashScript中,它像这样./exe arg1 arg2

目前,我可以输出haskell文件,但是我希望它返回一个值,以便可以执行类似bashVar = ./exe arg1 arg2

的操作

这基本上是我的haskell文件目前的样子:

main :: IO()
main = do (arg1:arg2:_) <- getArgs
    let returnValue = someFunction arg1 arg2
    print $ returnValue -- But I want it to return a value 

1 个答案:

答案 0 :(得分:5)

程序可以通过以下渠道将信息发送到Shell:

  1. 退出代码,介于0-255之间的数字。参见exitWith
  2. 文件描述符,独立字节序列的集合。最常用的是stdout和stderr。 (在通常情况下,fd 0(stdin)是只读的,因此通常不是程序将信息发送到Shell的方法。)使用例如putStr / putStrLn / print发送信息到标准输出,hPutStr / hPutStrLn / hPrintstderr发送信息去stderr。与其他fds的交流更多。如果您有兴趣,请这样说,我可以写出更多有关此内容。
  3. 文件系统。 (我假设您知道与这种媒体进行通讯的基本知识。)

这些通道始终可以用于向外壳程序发送信息(当然,尽管您编写的任何外壳程序脚本都可以忽略以这种方式传达的任何信息!)。另外,shell可以在调用程序之前设置其他通道。例如命名管道,套接字,dbus,共享内存等...