#shell #scripting #github #script #unix #macro #repo

btl

简单的 Rust 脚本。GitHub 仓库:https://github.com/znx3p0/btlsh

13 个版本

0.3.0 2021 年 4 月 6 日
0.2.9 2021 年 2 月 24 日
0.2.8 2021 年 1 月 28 日
0.1.2 2021 年 1 月 25 日

#1451Rust 模式

每月 46 次下载

MIT 许可证

8KB
174

Btl

docs

Btl 是一个简单的库,它使使用 Rust 进行 shell 脚本变得更容易。它最初是为了用于 build.rs 文件而编写的,但也可以用于更复杂的目的。

它的主要前提是将 shell 脚本与 Rust 以一种符合人体工程学的方式集成。这在 Windows 和 Unix 系统上都可以工作。

Btl 非常简单,由六个具有完全相同语法的宏组成。这些宏允许将 shell 脚本嵌入到 Rust 中,同时允许在人体工程学上进行极端定制。

  • shell!{}
  • detach!{}
  • execute!{}
  • exec!{}
  • cd!{}

tokio 的支持在 "tokio_shell" 功能下,它们的语法和名称相同,但它们有 "async_" 前缀。

注意:btl 使用 sh 作为 Unix 后端,使用 powershell 作为 Windows 后端。

如果您偶然发现任何错误,请在 GitHub 仓库中提出问题。

示例

fn shell() -> Result<(), std::io::Error> {
    // all macros use the try operator to avoid unwrapping
    // creates a detached process that may outlive the current process
    detach! {
        "touch m.txt";
        "sleep {}", 10;
        "rm m.txt";
    };

    // changes directory
    cd!("..").unwrap();
    let contents = execute! {
        "ls";
    };
    // returns a string containing the stdout of the process
    println!("contents {:?}", contents);

    // returns a bool indicating if the operation was successful
    if exec! {
        "ls";
    } {
        println!("success")
    } else {
        println!("not successful")
    }

    shell! {
        "ls {}", "-la";
    };

    Ok(())
}

依赖项

~0–11MB
~77K SLoC