2017-02-27 5 views
0

Ich muss einen Terminal-Befehl zu xcode starten. Dies ist der Befehl:Starten Sudo-Befehl von MacOS App Swift

sudo xattr -d -r com.test.exemple /Desktop/file.extension

I

let task = Process() 
     task.launchPath = "/usr/sbin/xattr" 
     task.arguments = ["-d","-r", "com.test.exemple"," /Desktop/file.extension"] 
     let pipe = Pipe() 
     task.standardOutput = pipe 
     task.standardError = pipe 
     task.launch() 
     task.waitUntilExit() 
     let data = pipe.fileHandleForReading.readDataToEndOfFile() 
     let output : String = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String 
     print(output) 
+0

Und was war das Ergebnis Ihrer Versuch? Sudo erfordert normalerweise, dass der Benutzer sein Passwort eingibt. –

+0

Ich weiß nicht, wie zu tun –

+0

sollte mich irgendwie das Passwort fragen –

Antwort

0

Hier ist ein Weg, so versucht zu tun Es verwendet eine Pipe zwischen Befehlen. Ich habe überprüft, dass wenn ich die Argumente in der auskommentierten Zeile verwende, dass die Datei vom Superuser erstellt wird.

Was es tut, ist dies:

echo 'Passwort' | sudo -S/usr/bin/xattr -d -r com.test.exemple /Desktop/file.extension

func doTask(_ password:String) { 
    let taskOne = Process() 
    taskOne.launchPath = "/bin/echo" 
    taskOne.arguments = [password] 

    let taskTwo = Process() 
    taskTwo.launchPath = "/usr/bin/sudo" 
    taskTwo.arguments = ["-S", "/usr/bin/xattr", "-d", "-r", "com.test.exemple", " /Desktop/file.extension"] 
    //taskTwo.arguments = ["-S", "/usr/bin/touch", "/tmp/foo.bar.baz"] 

    let pipeBetween:Pipe = Pipe() 
    taskOne.standardOutput = pipeBetween 
    taskTwo.standardInput = pipeBetween 

    let pipeToMe = Pipe() 
    taskTwo.standardOutput = pipeToMe 
    taskTwo.standardError = pipeToMe 

    taskOne.launch() 
    taskTwo.launch() 

    let data = pipeToMe.fileHandleForReading.readDataToEndOfFile() 
    let output : String = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String 
    print(output) 
} 
+1

dies wirft einen Fehler 'Konnte nicht posix_spawn: Fehler 1' – Cyrus

Verwandte Themen