NSTask 在命令中添加额外的单引号

NSTask putting extra single quote in command

我正在编写一个访问 OpenSSL 二进制文件的任务。如果我 copy/paste 没有单引号的命令,那么它在终端中完美运行。

我一直将引用粘贴到命令中。这是代码/错误...

let keySizeValue = keySizes[keySizeChoice.indexOfSelectedItem]

task.launchPath = "/usr/bin/openssl"
task.arguments = ["req -new -newkey \(keySizeValue) -out ~/Desktop/Certs/MyNew.csr -keyout ~/Desktop/Certs/\(privateKeyText.stringValue).key -subj \"/C=US/ST=\(stateText.stringValue)/L=\(cityText.stringValue)/O=\(organizationText.stringValue)/OU=\(departmentText.stringValue)/CN=\(commonNameText.stringValue)\"", "\(privateKeyPassword)", "\(passwordVerify)"]

task.launch()
task.waitUntilExit()

我已经在上面定义了我的任务和 keySizes 数组,但是错误是 Openssl:Error: req -new -newkey rsa:2048 -out ~/Desktop/Certs/MyNew.csr -keyout ~/Desktop/Certs/a.key -subj "/C=US/ST=a/L=a/O=a/OU=a/CN=a"' is an invalid command.

可能是我使用NSTask不当,但我觉得这样看起来不错。谁有好的建议 :D

如果您想为 NSTask 提供多个参数,则必须将它们添加到参数数组中作为用逗号分隔的唯一项

let keySizeValue = keySizes[keySizeChoice.indexOfSelectedItem]

task.launchPath = "/usr/bin/openssl"
task.arguments = ["req", "-new", "-newkey", "\(keySizeValue)", "-out", "~/Desktop/Certs/MyNew.csr", "-keyout", "~/Desktop/Certs/\(privateKeyText.stringValue).key", "-subj", "\"/C=US/ST=\(stateText.stringValue)/L=\(cityText.stringValue)/O=\(organizationText.stringValue)/OU=\(departmentText.stringValue)/CN=\(commonNameText.stringValue)\"", "\(privateKeyPassword)", "\(passwordVerify)"]

task.launch()
task.waitUntilExit()

如果有人还在看这个,我就能找到解决办法。我必须将我的 NSTask 的参数分开,然后通过 NSPipe 传递参数并使用 stdin 来获取参数以正确进入终端

mainTask.launchPath = "/usr/bin/openssl"
mainTask.arguments = ["req", "-new", "-nodes", "-newkey", "\(keySizeValue)", "-passout", "pass:\(privateKeyPassword.stringValue)", "-out", "/Users/\(userName)/Desktop/Certs/MyNew.csr", "-keyout", "/Users/\(userName)/Desktop/Certs/\(privateKeyText.stringValue).key", "-subj", "\"/C=US/ST=\(stateText.stringValue)/L=\(cityText.stringValue)/O=\(organizationText.stringValue)/OU=\(departmentText.stringValue)/CN=\(commonNameText.stringValue)\""]

let pipe = NSPipe()
mainTask.standardInput = pipe
mainTask.launch()
mainTask.waitUntilExit()

这修正了我的错误。感谢帮助