#子进程 #shell #

sh-inline

执行内联 shell (bash) 脚本的宏

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 日

1880Rust 模式

每月 43 次下载

MIT/Apache

13KB
213

sh-inline

此项目是从 https://github.com/tcr/commandspec 分支出来的 - 存在一些未经审查的 PR(例如 https://github.com/tcr/commandspec/pull/10)且此版本也有其他一些更改

许可证

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