run_script

crates.io CI codecov
license Libraries.io for GitHub Documentation downloads
Built with cargo-make

Run shell scripts in rust.

Overview

This library enables to invoke shell scripts based on their content.
While std::process::Command works great to execute standalone command, you need more manual code to take a script text and execute it.
For this purpose, this library was created.

Usage

Simply include the library and invoke the run/spawn function with the script text and run options:

```rust use run_script::ScriptOptions;

fn main() { let options = ScriptOptions::new();

let args = vec![];

// run the script and get the script execution output
let (code, output, error) = run_script::run(
    r#"
     echo "Directory Info:"
     dir
     "#,
    &args,
    &options,
)
.unwrap();

println!("Exit Code: {}", code);
println!("Output: {}", output);
println!("Error: {}", error);

// run the script and get a handle to the running child process
let child = run_script::spawn(
    r#"
     echo "Directory Info:"
     dir
     "#,
    &args,
    &options,
)
.unwrap();

let spawn_output = child.wait_with_output().unwrap();

println!("Success: {}", &spawn_output.status.success());

} ```

The library also provides the runscript!, spawnscript! and runscriptor_exit! macros for simpler usage.

```rust use run_script::ScriptOptions;

fn main() { // simple call to run script with only the script text let (code, output, error) = runscript::runscript!( r#" echo "Test" exit 0 "# ) .unwrap();

println!("Exit Code: {}", code);
println!("Output: {}", output);
println!("Error: {}", error);

// run script invoked with the script text and options
let options = ScriptOptions::new();
let (code, output, error) = run_script::run_script!(
    r#"
     echo "Test"
     exit 0
     "#,
    &options
)
.unwrap();

println!("Exit Code: {}", code);
println!("Output: {}", output);
println!("Error: {}", error);

// run script invoked with all arguments
let options = ScriptOptions::new();
let (code, output, error) = run_script::run_script!(
    r#"
     echo "Test"
     exit 0
     "#,
    &vec!["ARG1".to_string(), "ARG2".to_string()],
    &options
)
.unwrap();

println!("Exit Code: {}", code);
println!("Output: {}", output);
println!("Error: {}", error);

// spawn_script! works the same as run_script! but returns the child process handle
let child = run_script::spawn_script!(
    r#"
     echo "Test"
     exit 0
     "#
)
.unwrap();

println!("PID: {}", child.id());

} ```

Installation

In order to use this library, just add it as a dependency:

ini [dependencies] run_script = "^0.10.0"

API Documentation

See full docs at: API Docs

Contributing

See contributing guide

Release History

See Changelog

License

Developed by Sagie Gur-Ari and licensed under the Apache 2 open source license.