Я пытаюсь использовать Swift для запуска команды в терминале (macOS). А именно для создания пустого файла. Вот что у меня есть для работы в оболочке:
import Foundation
func shell(_ args: String...) ->Int32{
let task = Process()
task.launchPath = "/bin/bash"
task.arguments = args
task.launch()
task.waitUntilExit()
return task.terminationStatus
}
Обратите внимание, что я пробовал /usr/bin/env/ для пути запуска без хорошего результата.
Когда я вызываю shell("touch /path/to/new/file.txt"), он возвращает ошибку вроде:
/bin/bash: touch /Users/my_home_dir/Desktop/file.txt: No such file or directory
127
Если я изменю путь запуска, появится очень подробное, но бесполезное консольное сообщение Это напоминает мне типичный вывод Python<'class 'demo' at 0x577e040ab4f'>
Я даже пробовал запустить python в терминале и создать файл с open().
Я открыт для любых новых способов создания файлов в Swift (что было бы здорово) и любых способов сделать это, чтобы это действительно работает.
Заранее спасибо ?





Вызов этой команды (/bin/bash touch ~/Desktop/touch.txt) непосредственно в Терминале приводит к той же ошибке.
/usr/bin/touch: cannot execute binary file
Если вы хотите вызвать только «прикосновение», вы можете установить путь запуска на /usr/bin/touch и передать только ~/Desktop/touch.txt в качестве аргумента.
Если вы хотите вызвать общие команды bash / оболочки, вы передаете -c, за которым следует команда оболочки, объединенная в виде строки, чтобы она соответствовала: /bin/bash -c "touch ~/Desktop/touch.txt".
Спасибо @DavidRonnqvist, но затем он возвращает ошибку: /usr/bin/touch: cannot execute binary file \n 126. Любые идеи?
@Benj, как вы вызываете функцию, когда получаете эту ошибку?
shell("touch","/Users/my_home_dir/Desktop/file.txt")Я получаю ту же ошибку, когда запускаю /bin/bash touch ~/Desktop/touch.txt прямо из Терминала.
Думаю, я понял, что он не может выполнить двоичный файл touch, потому что у него нет необходимых разрешений .... Я пытался получить разрешения, но даже у меня, администратора, нет необходимые разрешения для их изменения. Есть ли простой способ обойти это, не испортив мою систему?
когда я пробую ваш новый ответ, ошибка заключается в том, что такого файла или каталога нет. Я не могу использовать pwd, потому что он не выводит результат. Как исправить эту ошибку?
Я не знаю swift, но сообщение об ошибке предполагает, что Bash интерпретирует всю команду как одну строку. На языках, которые я знаю, вызов оболочки требует, чтобы вы разбили команду на отдельные слова и передали их в виде массива. Итак, только предположение, вызвать в
shell("touch", "/path/to/new/file.txt")?