2017-02-27 9 views
0

xcodeに端末コマンドを起動する必要があります。 これはコマンドです:MacOS App Swiftからsudoコマンドを起動

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

私はここで行うための一つの方法だそう

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

そして、あなたの試みの結果は何でしたか? Sudoは一般的にユーザーにパスワードを入力させる必要があります。 –

+0

どうすればよいかわからない –

+0

何とか私にパスワードを聞いてください。 –

答えて

0

を試してみましたそれはコマンド間のパイプを使用します。コメントアウトされた行の引数を使用すると、ファイルがスーパーユーザーによって作成されることを確認しました。

それは何やっていることは、これは次のとおりです。 'パスワード' エコー

| 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

これは、エラー 'Could not posix_spawn:error 1'をスローします。 – Cyrus

関連する問題