Xcode / Swift: как добавить дополнительный аргумент для выполнения bash - PullRequest
0 голосов
/ 01 июля 2018

У меня есть этот код:

func syncShellExec(path: String?) {
    let script             = [path!]
    let process            = Process()
    let outputPipe         = Pipe()
    let filelHandler       = outputPipe.fileHandleForReading

    process.launchPath     = "/bin/bash"
    process.arguments      = script
    process.standardOutput = outputPipe
    .
    .
    .

В Swift я называю это так:

self.syncShellExec(path: Bundle.main.path(forResource: "initial", ofType: "command"))

Теперь я хочу добавить дополнительный аргумент для самого скрипта (используя функции в Bashscript). В терминале это будет выглядеть так:

/usr/bin/bash initial.command Do_My_Function

Как добавить это в процесс?

1 Ответ

0 голосов
/ 01 июля 2018

Вы можете добавить «переменный параметр» к вашей функции Swift, и добавьте аргументы к process.arguments:

func syncShellExec(path: String, args: String...) {

    let process            = Process()
    process.launchPath     = "/bin/bash"
    process.arguments      = [path] + args

    // ...
}

Теперь вы можете позвонить, например:

let scriptPath = Bundle.main.path(forResource: "initial", ofType: "command")!

syncShellExec(path: scriptPath)
syncShellExec(path: scriptPath, args: "Do_My_Function")
syncShellExec(path: scriptPath, args: "arg1", "arg2")

Примечание: Функция syncShellExec() ожидает путь к сценарию, поэтому я бы не стал делать этот параметр необязательным и принудительно разворачивать это внутри функции. С другой стороны, Bundle.main.path(...) вернет ноль, только если ресурс отсутствует. Это ошибка программирования , поэтому принудительное развертывание возвращаемого значения оправданный.

Если количество аргументов определяется только во время выполнения, то Вы можете определить аргументы как массив

func syncShellExec(path: String, args: [String] = [])

и назовите его

syncShellExec(path: scriptPath)
syncShellExec(path: scriptPath, args: ["Do_My_Function"])
syncShellExec(path: scriptPath, args: ["arg1", "arg2"])
...