commandspec 0.12.2

Rust macro to build std::process::Command objects with shell syntax. Uses macro_rules! and works on stable.
Documentation
#[macro_use]
extern crate commandspec;

#[cfg(not(windows))]
mod sh {
    #[test]
    fn sh_exit() {
        let res = sh_execute!(r"exit {a}", a = 42).unwrap_err();
        assert_eq!(res.error_code(), 42);
    }

    #[test]
    fn sh_echo1() {
        let res = sh_command!(
            r"A={a}; echo $A",
            a = "SENTINEL"
        ).unwrap().output().unwrap();
        assert_eq!(res.stdout, b"SENTINEL\n");
    }

    #[test]
    fn sh_echo2() {
        let res = sh_command!(
            r"A={a}; echo $A",
            a = "SENTINEL",
        ).unwrap().output().unwrap();
        assert_eq!(res.stdout, b"SENTINEL\n");
    }

    #[test]
    fn sh_empty() {
        sh_execute!(r"true").unwrap();
    }

    #[test]
    fn sh_empty_comma() {
        sh_execute!(r"true", ).unwrap();
    }
}

#[test]
fn cmd_rustc() {
    let args = vec!["-V"];
    let res = command!(
        r"
            rustc {args}
        ",
        args = args,
    ).unwrap().output().unwrap();
    assert!(res.stdout.starts_with(b"rustc "));
}