8 releases (5 breaking)

0.6.0 Jan 5, 2024
0.5.0 Jan 5, 2024
0.4.0 Dec 29, 2023
0.3.0 Dec 27, 2023
0.1.2 Dec 24, 2023

#1722 in Command line utilities

Download history 38/week @ 2023-12-18 74/week @ 2023-12-25 56/week @ 2024-01-01 3/week @ 2024-01-08 5/week @ 2024-01-22 18/week @ 2024-02-19 21/week @ 2024-02-26 8/week @ 2024-03-04 23/week @ 2024-03-11 12/week @ 2024-03-18 71/week @ 2024-03-25 27/week @ 2024-04-01

134 downloads per month
Used in 2 crates

MIT license

45KB
328 lines

About

The sprint crate provides the Shell struct which represents a shell session in your library or CLI code and can be used for running commands:

Shell exposes its properties so you can easily create a custom shell or modify an existing shell with the settings you want.


The sprint crate also provides the sprint CLI which provides an easy way to use the library directly from the command line in two modes:

CLI examples

$ sprint -h
Command runner

Usage: sprint [OPTIONS] [STRING]...

Arguments:
  [STRING]...  File(s) or command(s)

Options:
  -s <STRING>      Shell [default: "sh -c"]
  -f <STRING>      Fence [default: ```]
  -i <STRING>      Info [default: text]
  -p <STRING>      Prompt [default: "$ "]
  -h, --help       Print help
  -V, --version    Print version

Run command(s) given as arguments

$ sprint 'ls'
```text
$ ls
Cargo.lock
Cargo.toml
CHANGELOG.md
Makefile.md
README.md
src
t
target
tests
```

Run interactively

Library examples

Run command(s) and show the output

use sprint::*;

let shell = Shell::default();

shell.run(&[Command::new("ls"), Command::new("ls -l")]);

// or equivalently:
//shell.run_str(&["ls", "ls -l"]);

Run command(s) and return the output

use sprint::*;

let shell = Shell::default();

let results = shell.run(&[Command {
    command: String::from("ls"),
    stdout: Pipe::string(),
    codes: vec![0],
    ..Default::default()
}]);

assert_eq!(
    results[0].stdout,
    Pipe::String(Some(String::from("\
Cargo.lock
Cargo.toml
CHANGELOG.md
Makefile.md
README.md
src
t
target
tests
\
    "))),
);

Customize

use sprint::*;

let shell = Shell {
    shell: Some(String::from("sh -c")),

    dry_run: false,
    sync: true,
    print: true,

    fence: String::from("```"),
    info: String::from("text"),
    prompt: String::from("$ "),

    fence_color: bunt::style!("#555555"),
    info_color: bunt::style!("#555555"),
    prompt_color: bunt::style!("#555555"),
    command_color: bunt::style!("#00ffff+bold"),
    error_color: bunt::style!("#ff0000+bold+italic"),
};

shell.run(&[Command::new("ls"), Command::new("ls -l")]);

Modify

use sprint::*;

let mut shell = Shell::default();

shell.shell = None;

shell.run(&[Command::new("ls"), Command::new("ls -l")]);

shell.sync = false;

shell.run(&[Command::new("ls"), Command::new("ls -l")]);

Changelog

  • 0.1.0 (2023-12-22): Initial release
    • 0.1.1 (2023-12-24): Fix readme
    • 0.1.2 (2023-12-24): Fix readme
  • 0.2.0 (2023-12-26): Redesign; update dependencies
  • 0.3.0 (2023-12-27): Add error handling
  • 0.4.0 (2023-12-29): Fix error handling
  • 0.5.0 (2024-01-05): Add CLI; update dependencies
  • 0.6.0 (2024-01-05): Fix script mode output

Dependencies

~4–16MB
~185K SLoC