我想在许多文件上运行一个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
上设置一些选项吗?
提前感谢您的帮助!
答案 0 :(得分:1)
我刚刚找到了答案!解析*
和其他模式由shell完成,Process
仅运行给定命令。所以解决方案是创建一个shell并在那里运行命令:(将在代码中进行一些清理,但是这样做有效)
shell(["bash", "-c", "ls ~/Desktop/*.txt"])