//#!/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的...