从MacOS App Swift启动sudo命令

问题描述 投票:0回答:1

我需要启动一个终端命令到xcode。这是命令:

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)
swift xcode macos
1个回答
1
投票

这是使用命令之间的管道来实现它的一种方法。我验证了当我使用注释掉的行中的参数时,文件由超级用户创建。

这是做什么的:

echo'password'| 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)
}
© www.soinside.com 2019 - 2024. All rights reserved.