我正在制作一个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的评论,我禁用了沙箱功能,从而解决了运行脚本命令的问题。