无法在Swift中使用bash脚本中的mount_smbfs

时间:2019-10-04 08:33:33

标签: swift bash macos smb

我正在制作一个Swift应用程序,该应用程序需要通过bash脚本连接和访问SMB共享。但是,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的评论,我禁用了沙箱功能,从而解决了运行脚本命令的问题。

0 个答案:

没有答案