13个版本 (4个稳定版)
2.1.0 | 2023年3月28日 |
---|---|
2.0.2 | 2023年2月23日 |
1.1.0-beta.0 | 2023年2月4日 |
0.1.2-beta.0 | 2023年1月30日 |
#589 in Unix API
39KB
759 行
rsbash
关于
rsbash - 在Rust中运行bash命令。
我们的宏 rash! 和 rashf! 允许您调用bash shell,就像您通常从终端调用一样。由于这是通过与libc交互来实现的,因此这些宏只能在类Unix平台上(Linux、macOS等)使用。
文档
查看文档 - https://docs.rs/rsbash
许可证
MIT许可证 - 版权所有 (c) 2023 Luke Elliot
lib.rs
:
rsbash: 在Rust中运行bash命令。
我们的宏 rash!
和 rashf!
允许您调用bash shell,就像您通常从终端调用一样。由于这是通过与libc交互来实现的,因此这些宏只能在类Unix平台上(Linux、macOS等)使用。
动机
使用原生的 std::process::Command
构建器创建shell命令非常复杂。
假设您想将 "Hello world!" 写入stdout。
use std::io::Write;
use std::process::Command;
let command = Command::new("echo")
.arg("Hello world!")
.output()
.expect("Uh oh, couldn't say hello!");
std::io::stdout().write_all(&command.stdout).unwrap();
assert_eq!(std::str::from_utf8(&command.stdout).unwrap(), "Hello world!\n");
现在假设您想将输出管道到第二个命令,然后将结果写入stdout
use std::process::{Command, Stdio};
use std::io::Write;
let echo = Command::new("echo")
.arg("Hello world!")
.stdout(Stdio::piped())
.spawn()
.expect("Uh oh, couldn't say hello!");
let grep = Command::new("grep")
.arg("Hello")
.stdin(Stdio::from(echo.stdout.unwrap()))
.output()
.expect("Uh oh, couldn't grep for Hello!");
std::io::stdout().write_all(&grep.stdout).unwrap();
assert_eq!(std::str::from_utf8(&grep.stdout).unwrap(), "Hello world!\n");
使用 rash!
,相同的命令就像这样简单
use rsbash::rash;
let (ret_val, stdout, stderr) = rash!("echo 'Hello world!' | grep 'Hello'").unwrap();
assert_eq!(stdout, "Hello world!\n");
依赖关系
~2–11MB
~127K SLoC