7 个不稳定版本 (3 个破坏性变更)
0.4.0 | 2022 年 11 月 15 日 |
---|---|
0.3.0 | 2022 年 6 月 27 日 |
0.2.3 | 2022 年 6 月 23 日 |
0.2.2 | 2022 年 5 月 4 日 |
0.1.0 | 2020 年 8 月 26 日 |
1880 在 Rust 模式 中
每月 43 次下载
13KB
213 行
sh-inline
此项目是从 https://github.com/tcr/commandspec 分支出来的 - 存在一些未经审查的 PR(例如 https://github.com/tcr/commandspec/pull/10)且此版本也有其他一些更改
- 仅关注执行宏,而不尝试包含其他内容,如终止子进程。
- 文档
- 使用 "bash 严格模式" http://redsymbol.net/articles/unofficial-bash-strict-mode/
- 直接支持
Path
对象(包括引号非 UTF-8 值) - 移除了非 bash 宏(以及 Windows 支持)- 目前为止
许可证
MIT 或 Apache-2.0,任选其一。
lib.rs
:
在 Rust 中内联运行 bash 脚本的宏
在许多情况下,运行子进程很方便,尤其是通过 Unix shell 脚本。直接使用 std::process::Command
将会非常冗长。你可以通过使用例如 format!()
来“手动”生成脚本,但有一些重要且微妙的事情需要正确处理,例如处理引号问题。
此宏从开始接受 Rust 变量名,这些变量名被转换为字符串(必要时进行引号处理)并绑定到脚本中作为 bash 变量。
此外,生成的脚本默认使用 "bash 严格模式",即 set -euo pipefail
。
use sh_inline::*;
let foo = "variable with spaces";
bash!(r#"test "${foo}" = 'variable with spaces'"#, foo)?;
这将以以下方式生成和执行 bash 脚本
set -euo pipefail
foo="variable with spaces"
test ${foo} = 'variable with spaces'
相关crate
xshell
是一个不依赖于 bash 的 crate,也支持内联格式化。
依赖关系
~2–10MB
~110K SLoC