繁体   English   中英

我可以让readProcess删除引号吗?

[英]Can I make readProcess drop the quotes?

我正在尝试编写一些外部运行grep代码,然后分析输出。 具体来说,我想做

grep <username> *.test

但是,可悲的是,

readProcess "grep" [username, "*.test"]

似乎在参数周围生成带双引号的命令

grep "<username>" "*.test"

因为没有名为asterisk-dot-test的单个文件,所以grep barfs。 .test扩展名的文件。

我可以说服readProcess (或类似的东西)发出我想要的命令吗?

“*”不是由grep扩展,而是由shell扩展。 如果你想扩展,你应该运行sh -c 'grep username *.test类的东西。

更好的方法是将createProcessShellCommand参数一起使用。

你可能最好去createProcess ,这是最常用的流程创建功能。 就像是...

import System.Process
import System.IO

makeGrep username file = "grep " ++ username ++ " " ++ file

main :: IO ()
main = do
  (_, Just hOut, _, hProc) <- createProcess (
                                (shell (makeGrep "bob" "*.test"))
                                { std_out = CreatePipe }
                              )
  exitCode <- waitForProcess hProc
  output <- hGetContents hOut
  print output

我通常使用System.Cmd system 您应该构建一个正确的Shell命令(例如,执行所有转义),但它的优点是它使用了所提供的String。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM