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

Min*_*510 -2 bash haskell

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

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

(1)我像这样编译haskell文件 ghc -o exe haskellFile.hs

(2)在我的BashScript调用exe这样的./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 
Run Code Online (Sandbox Code Playgroud)

Dan*_*ner 5

程序可以通过以下渠道向shell发送信息:

  1. 退出代码,一个0-255的数字.见exitWith.
  2. 文件描述符,独立字节序列的集合.最常用的是stdout和stderr.(一般情况下,的fd 0(标准输入)是只读的,所以通常不为程序将信息发送到壳的方式.).例如:使用putStr/ putStrLn/ print将信息发送到标准输出,和hPutStr/ hPutStrLn/ hPrintstderr将信息发送到标准错误.与其他fds沟通更为复杂; 如果你有兴趣,可以这么说,我可以写一点关于这一点.
  3. 文件系统.(我假设您了解与此媒体沟通的基本知识.)

这些通道总是可以用来发送shell-ward信息(当然,你写的任何shell脚本都可以随意忽略任何以这种方式传递的信息!).另外,在调用程序之前,shell可以设置其他通道; 例如命名管道,插座,dbus,共享内存,......