Linux上的一个Swift脚本示例 An Example of Scripting with Swift on Linux

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看346 回复回复4 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 346|回复: 4
收起左侧

Linux上的一个Swift脚本示例 An Example of Scripting with Swift on Linux

[复制链接]
linus 发表于 2016-8-28 22:29:08 | 显示全部楼层 |阅读模式
快来登录
获取最新的苹果动态资讯
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码

如果你在推特上关注了我们(@iachievedit)你就知道我们不仅做了很多 Swift 开源项目,还有做了一些操作系统和架构。我们决定做这个项目没有特别的原因,但是看着各个版本的 git 仓库最终整合一个工具感觉真是太棒了。

我们很高兴最终 Swift 能够取代 Linux 上的其他脚本语言(比如名字读起来像 Bython 和 Buby 的两门语言),对我们来说是时候写脚本了(用 Swift)。

Linux上的一个Swift脚本示例 An Example of Scripting with Swift on Linux

Linux上的一个Swift脚本示例 An Example of Scripting with Swift on Linux - 敏捷大拇指 - Linux上的一个Swift脚本示例 An Example of Scripting with Swift on Linux


这里有一些注意事项:

  • 我们使用了一个 String 的 subscript 扩展,由于某些原因它可能不会是核心语言的一部分。
  • 我们的版本里的 exec 在其他脚本语言里是反引号(output = `ls`),我们需要执行命令并读取输出。
  • 当然还可以做更多优化和精简。


掌握了这些之后,下面就是 swiftrevs.swift:

[Swift] 纯文本查看 复制代码
import Glibc

extension String {
  subscript (r: CountableClosedRange<Int>) -> String {
    get {
      let startIndex = self.characters.index(self.characters.startIndex, offsetBy:r.lowerBound)
      let endIndex   = self.characters.index(self.characters.startIndex, offsetBy:r.upperBound)
      return self[startIndex..<endIndex]
    }
  }
}

func exec(_ command:String) -> String {
  let BUFSIZE = 128
  let pipe = popen(command, "r")
  var buf  = [CChar](repeating:CChar(0), count:BUFSIZE)
  var output:String = ""
  while fgets(&buf, Int32(BUFSIZE), pipe) != nil {
    output = String(cString:buf)
  }
  return output
}

func gitRevision() -> String {
  return exec("/usr/bin/git rev-parse HEAD")[0...9]
}

func gitFetchURL() -> String {
  return exec("/usr/bin/git remote show origin -n|grep Fetch| echo -n `cut --characters=14-`")
}

func gitBranch() -> String {
  return exec("/usr/bin/git branch | echo -n `cut --characters=2-`")
}

let dirs = ["swift", "llvm", "clang", "lldb", "compiler-rt", "cmark", "llbuild", "swiftpm", "swift-corelibs-xctest", "swift-corelibs-foundation", "swift-integration-tests", "swift-corelibs-libdispatch"]

for dir in dirs {
  let cwd     = String(cString:getcwd(nil, 0))
  let rc      = chdir(dir) // pushd
  guard rc == 0 else {
    continue
  }
  let fetch  = gitFetchURL()
  let rev    = gitRevision()
  let branch = gitBranch()
  print("\(dir),\(fetch),\(branch),\(rev)")
  chdir(cwd) // popd
}


我们按照如下方法来使用:

[Bash shell] 纯文本查看 复制代码
# swift swiftrevs.swift
swift,[url]https://github.com/apple/swift.git[/url],master,cf3fdff04
llvm,[url]https://github.com/apple/swift-llvm.git[/url],stable,8d0086ac3
clang,[url]https://github.com/apple/swift-clang.git[/url],stable,460d629e8
lldb,[url]https://github.com/apple/swift-lldb.git[/url],master,da120cf91
compiler-rt,[url]https://github.com/apple/swift-compiler-rt.git[/url],stable,9daa1b32c
cmark,[url]https://github.com/apple/swift-cmark.git[/url],master,5af77f3c1
llbuild,[url]https://github.com/apple/swift-llbuild.git[/url],master,7aadcf936
swiftpm,[url]https://github.com/apple/swift-package-manager.git[/url],master,423c2a1c8
swift-corelibs-xctest,[url]https://github.com/apple/swift-corelibs-xctest.git[/url],master,03905f564
swift-corelibs-foundation,[url]https://github.com/apple/swift-corelibs-foundation.git[/url],master,4c15543f8
swift-integration-tests,[url]https://github.com/apple/swift-integration-tests.git[/url],master,4eda8055a
swift-corelibs-libdispatch,[url]https://github.com/apple/swift-corelibs-libdispatch.git[/url],master,e922531c2


当然,这都是在满足构建 Swift 的仓库目录下运行的,如果你有兴趣学习为 X86 或者 ARM 设备构建 Swift ,请查阅我们的 package-swift 仓库。其中不仅包含 swiftrevs.swift ,还有几个能无痛构建 Swift(和 REPL、Foundation、Swift 包管理器)的脚本。




作者:Joe

都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

嗯,不错!期待更多好内容,支持一把:
支持敏捷大拇指,用支付宝支付10.24元 支持敏捷大拇指,用微信支付10.24元

评分

参与人数 1金钱 +10 贡献 +10 专家分 +10 收起 理由
Anewczs + 10 + 10 + 10 32个赞!专家给力!

查看全部评分

本帖被以下淘专辑推荐:

i0n1c 发表于 2016-8-28 23:06:25 | 显示全部楼层
Swift要在后台大行其道了!
firefighter 发表于 2016-8-29 14:42:40 | 显示全部楼层
用Swift作脚本总感觉怪怪的
乔大爷 发表于 2016-8-29 14:50:01 | 显示全部楼层
firefighter 发表于 2016-8-29 14:42
用Swift作脚本总感觉怪怪的

Mac就是在Unix上进化而来的,Swift能开发MacOS,自然也要支持Linux!
我是90后 发表于 2016-10-27 23:52:29 | 显示全部楼层
32个赞!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

做任务,领红包。
我要发帖

分享扩散

都看到这里了,就把这资料推荐给您的好朋友吧,让他们也感受一下。
您的每一位朋友访问此永久链接后,您都将获得相应的金钱积分奖励
热门推荐

合作伙伴

Swift小苹果

  • 北京治世天下科技有限公司
  • ©2014-2016 敏捷大拇指
  • 京ICP备14029482号
  • Powered by Discuz! X3.1 Licensed
  • swifthumb Wechat Code
  •   
快速回复 返回顶部 返回列表