Не могу использовать mount_smbfs из скрипта bash в Swift - PullRequest
0 голосов
/ 04 октября 2019

Я создаю приложение Swift, к которому нужно подключиться и получить доступ к SMB-ресурсу через bash-скрипт. Однако скрипт bash возвращает «1025 сбоев при открытии устройства smb, syserr = Нет такого файла или каталога».

Если я вызываю скрипт bash из Терминала, он работает как положено. Я тоже URL, кодирующий пароль.

Класс скрипта:

import Foundation

class BashScript {

    class func runScript(script: String, arguments: [String]?) -> String {
      let path = Bundle.main.path(forResource: "connector", ofType: "sh")!
      let task = Process()
      let pipe = Pipe()
      task.standardError = pipe
      task.executableURL = URL(fileURLWithPath: "/bin/bash", isDirectory: false)
      if(arguments == nil){
          task.arguments = [path]
      } else {
          task.arguments = [path] + arguments!
      }

      do {
          try task.run()
          print(task.standardInput ?? "No stdin")
          print(task.standardOutput ?? "No stdout")
          print(task.standardError ?? "No stderr")
      } catch {
          print("Unexpected error: \(error)")
      }

      let data = pipe.fileHandleForReading.readDataToEndOfFile()
      let output: String? = String(data: data, encoding: String.Encoding.utf8)
      print(output ?? "No output")

      return output!
  }
}

Скрипт (connector.sh):

mount_smbfs "//$3$1:$2@192.168.0.10/home" /Users/samuel/mnt

Код в AppDelegate:

let result = BashScript.runScript(script: "connector", arguments: ["username", "password", "PRIVATE;"])

Я начинаю подозревать, что есть какое-то ограничение в изолированной программной среде XCode или что-то в этом роде, так как скрипт отлично работает из терминала.

РЕДАКТИРОВАТЬ:

Я отключил песочницу благодаря комментарию от @MartinR ниже, и это решило проблему с запуском команды сценария.

...