[英]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
类的东西。
更好的方法是将createProcess
与ShellCommand
参数一起使用。
你可能最好去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.