NSTask (whoami) 到字符串,到 NSTask (cp) 失败 - Swift

NSTask (whoami) to string, to NSTask (cp) failed - Swift

我想在存档之前将我的 Mac 的地址簿复制到一个保存位置。这是我的代码:

 // whoami
                let whoam : NSTask = NSTask()
                whoam.launchPath = "/usr/bin/whoami"

            // pipe whoami| NSString
                let UltimPipe : NSPipe = NSPipe()
                let UltimPipeLisible : NSFileHandle = UltimPipe.fileHandleForReading
                whoam.standardOutput = UltimPipe
            // lancement
                whoam.launch()

            // lecture de la sortie
                let DonSortie : NSData = UltimPipeLisible.readDataToEndOfFile()
                let Sortie : String? = String(data: DonSortie, encoding:
                    NSUTF8StringEncoding)

                if Sortie == nil
                {
                    print("Résultat de sortie non-valide")
                    let MonAlerte:NSAlert = NSAlert()
                    MonAlerte.messageText = "Aucun élement trouvé."
                    MonAlerte.informativeText = ""
                    MonAlerte.runModal()
                    exit(1)
                }

                let ligne : String = Sortie!
                print (ligne)

                let source = "/Users/"+ligne+"/Library/Application Support/AddressBook"
                let destin = "/Users/"+ligne+"/Desktop/test/"


//cp
                let duTache : NSTask = NSTask()
                duTache.launchPath = "/bin/cp"
                duTache.arguments = [ "-r", source, " ", destin ]
                print (duTache.arguments)

                let ifcPipe : NSPipe = NSPipe()
                duTache.standardOutput = ifcPipe

            // lancement
                duTache.launch()

返回的错误是:

usage: cp [-R [-H |...]

看起来我有语法问题,当我打印 duTache 的参数时 (print (duTache.arguments)),答案是:

Optional(["-r", "/Users/username\n/Library/Application Support/AddressBook", " ", "/Users/username\n/Desktop/test/"])

也许如果我删除用户名后面的“\n”,操作就可以完成?有人知道怎么做吗?

感谢您阅读我的post。

var ligne = "username\n"
print(ligne,0)
/*
username
0
*/
let newLine = ligne.removeAtIndex(ligne.endIndex.predecessor()) // newLine is "\n"
print(ligne,0)
/*
username 0
*/
import Foundation

func execute(command: String, args: [String]) -> String {

    let task = NSTask()

    task.launchPath = command
    task.arguments = args

    let pipe = NSPipe()
    task.standardOutput = pipe
    task.launch()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String? = String(data: data, encoding: NSUTF8StringEncoding)

    task.waitUntilExit()

    return output ?? ""

}


print(execute("/bin/ls", args: ["-alsp"]))
print(execute("/bin/ls", args: []))


execute("/usr/bin/say", args: ["Hello World!"])

如果您发现如何处理异常(尝试一些愚蠢的命令,如 /bin/lss),请告诉我!我需要先查看文档...