Я создаю приложение 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 ниже, и это решило проблему с запуском команды сценария.