从MacOS App Swift启动sudo命令 [英] Launch sudo command from MacOS App Swift

查看:238
本文介绍了从MacOS App Swift启动sudo命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要启动一个终端命令来进行xcode. 这是命令:

I need to launch a terminal command to xcode. This is the command:

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

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)

推荐答案

这是在命令之间使用管道的一种方法.我验证了当我在注释行中使用参数时,超级用户会创建文件.

Here's one way to do it using a pipe between commands. I verified that when I use the arguments in the commented out line that the file gets created by the super user.

它正在做什么:

回显密码" |须藤-S/usr/bin/xattr -d -r com.test.exe /Desktop/file.extension

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)
}

这篇关于从MacOS App Swift启动sudo命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆