2015-12-18 34 views
0

我在寫一個任務來訪問OpenSSL二進制文件。如果我複製/粘貼不帶單引號的命令,那麼它在終端中完美工作。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() 

我定義我的任務和keySizes陣列上方,但錯誤是 OpenSSL:已錯誤: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

回答

0

分離的唯一的項目如果有人仍在期待在此,我能夠找到解決方案。我不得不分開我NSTask的參數,然後通過NSPipe傳遞參數,並使用標準輸入來獲取參數正常進入終端

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

該固定我的錯誤。感謝您的幫助

1

如果你想給多個參數的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() 
+0

另外,請注意,NSTask並不會將主機目錄擴展到主目錄。 –