Simple Rust macro for building std::process::Command objects. Uses macro_rules! and works on stable.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
tests
.gitignore
.travis.yml
Cargo.toml
README.md
appveyor.yml
bors.toml

README.md

commandspec

Simple Rust macro for building std::process::Command objects. Uses macro_rules! and works on stable.

[dependencies]
commandspec = "0.10"

Then:

#[macro_use]
extern crate commandspec;

use commandspec::CommandSpec; // .execute() method on Command
use std::process::Command;

let result = execute!(
    r"
        cd path/location
        export RUST_LOG=full
        export RUST_BACKTRACE=1
        cargo run {release_flag} --bin {bin_name} -- {args}
    ",
    release_flag=Some("--release"),
    bin_name="binary",
    args=vec!["arg1", "arg2"],
)?;
// result = Ok(()) on success (error code 0), Err(CommandError) for all else

Format of the commandspec input, in order:

  • (optional) cd <path> to set the current working directory of the command, where path can be a literal, a quoted string, or format variable.
  • (optional) one or more export <name>=<value> lines to set environment variables, with the same formatting options.
  • Last, a command you want to invoke, optionally with format arguments.

Features:

  • format-like invocation makes it easy to interpolate variables, with automatic quoting
  • Equivalent syntax to shell when prototyping
  • Works on stable Rust.

License

MIT or Apache-2.0, at your option.