//#!/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
}
在swift脚本里执行sh语句
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 在Mac/Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such ...
- public class Test { public static void main(String[] a...
- 关于创建虚拟主机来说对于我们这些后台程序猿来说应该算是要掌握的一种技能吧,然后我在这里讲的是oneinstack的...