在swift脚本里执行sh语句

//#!/usr/bin/env swift

import Foundation

struct ProcessRunResult{
    let isSuccess: Bool
    let stdError: String
    let stdOutput: String
}

func cmd(_ launchPath: String, arguments: [String], currentDir: URL? = nil) -> ProcessRunResult{
    let process = Process()
    process.launchPath = launchPath
    process.arguments = arguments
    if let url = currentDir {
        process.currentDirectoryPath = url.path
    }
    
    let errPipe = Pipe()
    let outputPipe = Pipe()
    process.standardError = errPipe
    process.standardOutput = outputPipe
    
    process.launch()
    process.waitUntilExit()
    
    let error = String(data: errPipe.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) ?? ""
    let output = String(data: outputPipe.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) ?? ""
    return ProcessRunResult(isSuccess: process.terminationStatus == 0,
                            stdError: error.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines),
                            stdOutput: output.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines))
}

func which(_ command: String) -> String {
    let result = cmd("/usr/bin/which", arguments: [command])
    return result.stdOutput.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
}

func shell(_ command: String, currentDir: URL? = nil) -> String {
    var args = command.components(separatedBy: CharacterSet.whitespacesAndNewlines)
    let cmdName = which(args.first!)
    args.removeFirst()
    let result = cmd(cmdName, arguments: args, currentDir: currentDir)
    print(result.isSuccess ? result.stdOutput : result.stdError)
    return result.stdOutput
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容