13个版本 (4个稳定版)

2.1.0 2023年3月28日
2.0.2 2023年2月23日
1.1.0-beta.02023年2月4日
0.1.2-beta.02023年1月30日

#589 in Unix API

MIT 许可证

39KB
759

rsbash

GitHub issues Cargo Downloads Cargo Latest version

关于

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");

有关 rash!rashf! 宏以及 RashError 的更多信息,请参阅。

依赖关系

~2–11MB
~127K SLoC