Ben
Ben

Reputation: 3485

Run shell command with pattern in Swift

I would like to run a shell command on many files that should match on a given filename regex. I found this code snippet that runs a shell command with arguments:

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
}

It runs great, but it does not resolve the parameters:

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

Does not resolve the * to all txt files, it tries to only work on a file called *.txt. Is there some option I need to set on Process?

Thanks in advance for your help!

Upvotes: 0

Views: 109

Answers (1)

Ben
Ben

Reputation: 3485

I just found out the answer! The resolving of * and other patterns is done by the shell, Process only runs a given command. So the solution is to create a shell and run the command in there: (will do some clean up in the code, but this works)

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

Upvotes: 1

Related Questions