Отказ от ответственности: это было протестировано и работает на моем Mac, но у меня нет джейлбрейкнутых iOS-устройств, и поэтому у меня нет возможности там протестировать.
Вот оно,все убрано:
func system(_ command: String) {
let argsArray = command.split(separator: " ").map { (substr) -> String in
return String(substr)
}
guard argsArray.count != 0 else { return }
let command = strdup(argsArray.first!)
let args = argsArray.map { strdup($0) } + [nil]
posix_spawn(nil, command, nil, nil, args, nil)
return
}
system("/bin/echo you are cool man")
system("/bin/ls -l /")
У меня нет взломанного iPhone, но я знаю, что это работает на моем Mac.Для этого вам потребуется знать полный путь к команде, которую вы хотите выполнить, например / bin / ls в приведенном выше примере.
Если вы хотите бытьв состоянии передать командную строку, которая интерпретируется оболочкой, что вы могли бы использовать эту альтернативную версию:
func shellInterpretedSystem(_ command: String) {
let argsArray = [
"/bin/sh",
"-c",
command
].map { (substr) -> String in
return String(substr)
}
guard argsArray.count != 0 else { return }
let command = strdup(argsArray.first!)
let args = argsArray.map { strdup($0) } + [nil]
posix_spawn(nil, command, nil, nil, args, nil)
return
}
shellInterpretedSystem("ls -l /Users")
В этом случае ваша переменная PATH и т. д. будут приняты во внимание, и такие вещи, как звездочки (*) будет расширен.