SwiftyBash Logo : When Bash meets Swift

Swift 4.1 Badge Travis Badge Plateform

SwiftyBash 是一个使用 Swift 编写的 Swift Bash 脚本和管道库。

🤖 用法

🚀 简单的 bash 命令

通过 BashCmd 对象描述你的命令,然后运行它!就是这么简单

// Run `ls` in the executable directory
let ls = BashCmd("ls")
let result = try! ls.run()

// Run `git status` from ~/MyProject directory
let status = BashCmd("git", args:"status", from:"~/MyProject")
let result = try! status.run()

🤝 管道

你可以轻松地管道输出和输入流,次数不限!

let ls = BashCmd("ls", args:"-l", from:"~/")
let grep = BashCmd("grep", args:"root")
let wc = BashCmd("wc", args:"-l")

// Use pipe() function
let result = try! ls.pipe(grep).pipe(wc).run()

自定义运算符

你可以使用 | 从一个命令管道到另一个命令 😻

⚠️你必须在你的项目中声明运算符才能使用它!

// Operator declaration somewhere in your project
infix operator |

// Have fun ! How beautiful is it ?
let result = try! (ls | grep | wc).run()

🔥 错误处理

SwiftyBash 使用 Swift 异常来处理错误,通过抛出一个 BashException。

let grep = BashCmd("grep", args:"hosts", "/private/etc/*")
do {
  try grep.run()
}
catch {
  if let error = error as? BashException {
    print(error.stderr) // Prints STDERR
    print(error.stdout) // Prints STDOUT
  }
}

✏️ 输出类型

你可以选择输出类型,可以是简单的 String,也可以将输出写入文件。默认是 .string(.raw)

写入文件

let cat = BashCmd("cat", args:"file.json")
let grep = BashCmd("grep", args:"'secrets'")

// Write the result into `secrets.json`
try! (cat | grep).run(outputType:.file("secrets.json"))

空格修剪

let ls = BashCmd("ls", args:"-l")
let wc = BashCmd("wc", args:"-l")

let result = try! (ls | wc).run(outputType:.string(.raw))                 // result is `       6`
let result = try! (ls | wc).run(outputType:.string(.whiteSpacesTrimmed))  // result is `6`

输出示例

当以字符串或文件形式获取输出时,换行符 (\n) 会被保留。所以,这是一个输出示例

let ls = BashCmd("ls", args:"-l")
let result = try! ls.run()
print(result!)

... 显示 ...

total 24
-rw-r--r--+ 1 me  staff  331 12 nov 23:33 Package.resolved
-rw-r--r--+ 1 me  staff  743 12 nov 23:19 Package.swift
-rw-r--r--+ 1 me  staff   50 12 nov 23:02 README.md
drwxr-xr-x+ 3 me  staff  102 12 nov 23:02 Sources
drwxr-xr-x+ 2 me  staff   68 12 nov 23:02 Tests

🚧 安装

SwiftyBash 目前仅适用于 Swift 4。 如果你需要 Swift 3 兼容性,请随时打开 issue 或创建 Pull Request 😉

📦 Swift 包管理器

更新你的 Package.swift 文件,将这行代码添加到你的依赖项中

    dependencies: [
      [...]
      .package(url: "https://github.com/pauljeannot/SwiftyBash.git", from: "1.0.0"),
    ]

不要忘记也将其添加到你的目标依赖项中

    targets: [
        .target(
            name: "YourProject",
            dependencies: ["...", "SwiftyBash"]),
    ]

👤 联系方式

如果你有任何问题、新想法,或者如果你发现了一个错误 (❌),请随时打开 issue 或通过 电子邮件 联系我。