在Swift中运行带有模式的shell命令

时间:2017-08-18 19:08:40

标签: swift shell command-line-interface

我想在许多文件上运行一个shell命令,这些文件应该在给定的文件名regex上匹配。我发现这个代码片段运行带有参数的shell命令:

func shell(_ arguments: [String] = []) -> String {

    let task = Process()
    task.launchPath = "/usr/bin/env"
    task.arguments = arguments

    let pipe = Pipe()
    task.standardOutput = pipe
    task.launch()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output = String(data: data, encoding: .utf8) ?? "unknown"

    return output
}

它运行良好,但它无法解析参数:

shell(["ls", "~/Desktop/*.txt"])

无法解析*到所有txt个文件,它会尝试仅处理名为*.txt的文件。我需要在Process上设置一些选项吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我刚刚找到了答案!解析*和其他模式由shell完成,Process仅运行给定命令。所以解决方案是创建一个shell并在那里运行命令:(将在代码中进行一些清理,但是这样做有效)

shell(["bash", "-c", "ls ~/Desktop/*.txt"])