我想用swift替换我的CI bash脚本.我不知道如何调用正常的终端命令,比如lsxcodebuild

#!/usr/bin/env xcrun swift

import Foundation // Works
println("Test") // Works
ls // Fails
xcodebuild -workspace myApp.xcworkspace // Fails

$ ./script.swift
./script.swift:5:1: error: use of unresolved identifier 'ls'
ls // Fails
^
... etc ....

推荐答案

如果在Swift代码中不使用命令输出,以下内容就足够了:

#!/usr/bin/env swift

import Foundation

@discardableResult
func 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

Swift相关问答推荐

UITableView未显示类数组数据

绑定到可选值的非可选属性?'

避免嵌套导航TabView

如何把多个可观测性变成一个完备性?

(Swift)混淆了函数内 for-in 循环的返回值和循环后(函数内)的返回值)

Swift:结果的失败类型不能是协议 - Type 'any ShadowError' cannot conform to Error

可以使 Swift init 仅可用于 Objective C 吗?

TabView 无法在屏幕上正确显示

关于变量的视图的 SwiftUI 生命周期

UUID 哈希值是不确定的吗?

Swift - 订阅视图之外的绑定值

Swift Swiftui - 将 colored颜色 保存到 UserDefaults 并从 @AppStorage 使用它

使 Swift 并发中的任务串行运行

找不到接受提供的参数的/的重载

swift中的SequenceType和CollectionType有什么区别?

在 Swift 中将两个字节的 UInt8 数组转换为 UInt16

Xcode 7.3 Swift 的语法高亮和代码完成问题

FCM 后台通知在 iOS 中不起作用

Swift 协议只能设置?

Swift 2.0 按属性对对象数组进行排序