如何在使用Shelly运行外部进程时处理多行输出?
问题描述:
我正在寻找类型为Text -> [Text]
的函数,实质上这将按换行符分割文本。然而,我不能只是分裂\n
,因为这可能会逃脱例如\\n
,我不知道还有什么其他并发症存在。如何在使用Shelly运行外部进程时处理多行输出?
Main.hs
{-# LANGUAGE OverloadedStrings #-}
import Data.Text (Text)
import Data.Text.IO
import Shelly
example :: Sh Text
example = run "./example.sh" []
main :: IO()
main = do
v <- shelly example
Data.Text.IO.putStrLn v
example.sh输出./example.sh
的
echo "test1\\n"
echo "test2"
echo "test3"
:
test1\n
test2
test3
因此,这是3行输出。
Shelly是否支持一些功能来处理上述问题?或者,也许一些其他Haskell库来解析输出?我想它会看起来像putStrLn
但不输出到IO()
它会输出到[Text]
?
答
https://hackage.haskell.org/package/text-1.2.2.2/docs/Data-Text.html#v:lines
main :: IO()
main = do
v <- shelly example
print $ Data.Text.lines v