1
{-# LANGUAGE OverloadedStrings #-}

import Turtle

runSh :: Text -> IO ()
runSh x = view $ inshell x empty

main :: IO ()
main = do
  runSh "echo 'abcxyz'"

我有上面的程序输出:

Line "abcxyz"

有没有办法可以捕获这个文本而不输出到 shell 的标准输出?

本质上,我想运行该流程并从操作中获取一个[Line]值而不是一个()IO

4

1 回答 1

1

这可以通过shellStrictWithErr 实现

{-# LANGUAGE OverloadedStrings #-}

import Turtle (empty, shellStrictWithErr, ExitCode)
import Data.Text (Text)

runSh :: Text -> IO (ExitCode, Text, Text)
runSh x' = shellStrictWithErr x' empty

main :: IO ()
main = do
  (e, v, v') <- runSh "ls"
  print e
  print v
  print v'
于 2017-10-15T19:10:59.163 回答