Skip to content

QiuZhiFei/swift-commands

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Swift Commands

SPM CocoaPods CI Status License Platform

Swift utilities for running commands.

The Commands module allows you to take a system command as a string and return the standard output.

API documentation can be found here.

Usage

import Commands

Bash

Execute shell commands.

let result = Commands.Task.run("bash -c ls")

Or

let result = Commands.Task.run(["bash", "-c", "ls"])

Or

let result = Commands.Bash.run("ls")

Python

Execute python scripts.

let result = Commands.Task.run("python main.py")

Execute python commands.

let result = Commands.Task.run("python -c import base64; print(base64.b64encode(b'qiuzhifei').decode('ascii'))")

Or

let result = Commands.Python.run("import base64; print(base64.b64encode(b'qiuzhifei').decode('ascii'))")

Ruby

Execute ruby scripts.

let result = Commands.Task.run("ruby main.rb")

Execute ruby commands.

let result = Commands.Task.run("ruby -e require 'base64'; puts Base64.encode64('qiuzhifei')")

Or

let result = Commands.Ruby.run("require 'base64'; puts Base64.encode64('qiuzhifei')")

Alias

Create a shortcut name for a command.

let node = Commands.Alias("/usr/local/bin/node", dashc: "-e")
let result = node.run("console.log('qiuzhifei')")

Setting global environment variables

Commands.ENV.global["http_proxy"] = "http://127.0.0.1:7890"
Commands.ENV.global.add(PATH: "/Users/zhifeiqiu/.rvm/bin")

Making Commands

let request: Commands.Request = "ruby -v"

Or

let request: Commands.Request = ["ruby", "-v"]

Or

let request = Commands.Request(executableURL: "ruby", arguments: "-v")

Change environment variables

var request: Commands.Request = "ruby -v"
request.environment?.add(PATH: "/usr/local/bin")
request.environment?["http_proxy"] = "http://127.0.0.1:7890"
request.environment?["https_proxy"] = "http://127.0.0.1:7890"
request.environment?["all_proxy"] = "socks5://127.0.0.1:7890"

let result = Commands.Task.run(request)

Result Handler

Returns the Commands.Result of running cmd in a subprocess.

let result = Commands.Task.run("ruby -v")
switch result {
case .Success(let request, let response):
  debugPrint("command: \(request.absoluteCommand), success output: \(response.output)")
case .Failure(let request, let response):
  debugPrint("command: \(request.absoluteCommand), failure output: \(response.errorOutput)")
}

Adding Commands as a Dependency

To use the Commands library in a SwiftPM project, add the following line to the dependencies in your Package.swift file:

let package = Package(
    // name, platforms, products, etc.
    dependencies: [
        .package(url: "https://github.com/qiuzhifei/swift-commands", from: "0.6.0"),
        // other dependencies
    ],
    targets: [
        .target(name: "<command-line-tool>", dependencies: [
            .product(name: "Commands", package: "swift-commands"),
        ]),
        // other targets
    ]
)

CocoaPods (OS X 11.0+)

You can use CocoaPods to install Commands by adding it to your Podfile:

pod 'Commands',        '~> 0.7.0'

QuickStart

git clone https://github.com/QiuZhiFei/swift-commands
cd swift-commands && open Package.swift

References