3 回答

TA貢獻1887條經驗 獲得超5個贊
如果你不在Swift代碼中使用命令輸出,那么下面就足夠了:
#!/usr/bin/env swiftimport Foundation@discardableResultfunc shell(_ args: String...) -> Int32 { let task = Process() task.launchPath = "/usr/bin/env" task.arguments = args task.launch() task.waitUntilExit() return task.terminationStatus}shell("ls")shell("xcodebuild", "-workspace", "myApp.xcworkspace")
更新:適用于Swift3 / Xcode8

TA貢獻1998條經驗 獲得超6個贊
如果您想在命令行中“完全”使用命令行參數(不分離所有參數),請嘗試以下操作。
(這個答案改進了LegoLess的答案,可以在Swift 4 Xcode 9.3中使用)
func shell(_ command: String) -> String {
let task = Process()
task.launchPath = "/bin/bash"
task.arguments = ["-c", command]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
return output
}
// Example usage:
shell("ls -la")

TA貢獻1757條經驗 獲得超7個贊
這里的問題是你不能混淆和匹配Bash和Swift。您已經知道如何從命令行運行Swift腳本,現在需要添加方法以在Swift中執行Shell命令。來自PracticalSwift博客的總結:
func shell(launchPath: String, arguments: [String]) -> String?{ let task = Process() task.launchPath = launchPath task.arguments = arguments let pipe = Pipe() task.standardOutput = pipe task.launch() let data = pipe.fileHandleForReading.readDataToEndOfFile() let output = String(data: data, encoding: String.Encoding.utf8) return output}
以下Swift代碼將xcodebuild
使用參數執行,然后輸出結果。
shell("xcodebuild", ["-workspace", "myApp.xcworkspace"]);
至于搜索目錄內容(這是ls
Bash中的內容),我建議NSFileManager
直接在Swift中使用和掃描目錄,而不是Bash輸出,這可能很難解析。
- 3 回答
- 0 關注
- 2344 瀏覽
添加回答
舉報