三方、工具、效率iOS 的那些事儿

swift 脚本

2018-12-20  本文已影响31人  枫林风雨

swift脚本无论是.sh 格式,还是.swift格式,都需要以#!/usr/bin/env swift开头,来指定脚本的解释程序。当然,如果执行脚本的时候你指定了解释器,那头部相应的解释器就可以不加了。(使用env指定解释器)

Shell嵌套swift

swift的强大功能和灵活性使它甚至可以在shell脚本中直接运行swift代码,而想要混写只需在头部添加swift解释器。

创建test.sh文件,输入下方所示代码,这个test.sh文件可以像普通的sh脚本一样运行:

#!/usr/bin/env swift
import Foundation

var status :Int = 0
status = 10
print("Status = \(status)")

执行./test.sh ,输出结果为Status = 10

你可以在你的脚本里添加更多的swift功能来强壮脚本的功能,甚至可以使用import引入swift的别的库:

#!/usr/bin/env swift
import Darwin

var status = arc4random_uniform(10)
print("Status = \(status)")

Swift调用shell

swift调用shell指令没有这么简洁了,毕竟swift是高级语言,调用shell指令需要使用对象的方式来实现:

#!/usr/bin/env swift

import Foundation
class Execution{
    class func execute(path:String,arguments:[String]? = nil) -> Int {
        let task = Process();
        task.launchPath = path
        if arguments != nil {
           task.arguments = arguments!
        }
        task.launch()
        task.waitUntilExit()
        return Int(task.terminationStatus)
    }
}

var status :Int = 0
status = Execution.execute(path: "/bin/ls")
print("Status = \(status)")

//status = Execution.execute(path: "/bin/ls",arguments:["/"])
//print("Status = \(status)")

稍微解释下代码
  1. 通过Process初始化一个进程对象(只是一个swift对象,此时还没有生成进程),launchPath设置进程的加载路径,arguments可以设置需要传给进程的参数。
  2. 初始并设置完毕后,调用launch方法正式开启进程,waitUntilExit会堵塞当前的swift脚本进程,等待我们创建的进程的任务执行完毕再往下执行。
  3. 最后我们在终端执行这个swift文件swift ~/Desktop/test.swift,输出结果为终端当前所在目录的所有文件(因为执行的是ls指令)和Status = 0字符串,其中0表示执行成功。

注意:

  • 执行swift脚本需要使用swift命令:swift ~/Desktop/test.swift,如果你像示例一样在头部指定了解释器就可以不使用swift命令了,直接使用:~/Desktop/test.swift来执行。
  • 如果报错没有执行权限,执行:chmod +x ~/Desktop/test.swift,添加执行权限。
上一篇下一篇

猜你喜欢

热点阅读