Создать файл в терминале Bash из Swift

Я пытаюсь использовать 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 (что было бы здорово) и любых способов сделать это, чтобы это действительно работает.

Заранее спасибо ?

Я не знаю swift, но сообщение об ошибке предполагает, что Bash интерпретирует всю команду как одну строку. На языках, которые я знаю, вызов оболочки требует, чтобы вы разбили команду на отдельные слова и передали их в виде массива. Итак, только предположение, вызвать в shell("touch", "/path/to/new/file.txt")?

Benjamin W. 07.09.2018 19:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
478
1

Ответы 1

Вызов этой команды (/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 08.09.2018 10:31

@Benj, как вы вызываете функцию, когда получаете эту ошибку?

David Rönnqvist 08.09.2018 10:59
shell("touch","/Users/my_home_dir/Desktop/file.txt")
Benj 09.09.2018 16:15

Я получаю ту же ошибку, когда запускаю /bin/bash touch ~/Desktop/touch.txt прямо из Терминала.

David Rönnqvist 10.09.2018 10:53

Думаю, я понял, что он не может выполнить двоичный файл touch, потому что у него нет необходимых разрешений .... Я пытался получить разрешения, но даже у меня, администратора, нет необходимые разрешения для их изменения. Есть ли простой способ обойти это, не испортив мою систему?

Benj 10.09.2018 12:46

когда я пробую ваш новый ответ, ошибка заключается в том, что такого файла или каталога нет. Я не могу использовать pwd, потому что он не выводит результат. Как исправить эту ошибку?

Benj 11.09.2018 11:18

Другие вопросы по теме