#unix-shell #shell #command-line #unix-command #unix #words #quote

无需std shell-words

根据Unix shell的解析规则处理命令行

3 个版本 (稳定版)

使用旧的Rust 2015

1.1.0 2022年2月6日
1.0.0 2020年5月6日
0.1.0 2018年3月9日

#25 in Unix API

Download history 292654/week @ 2024-03-16 287574/week @ 2024-03-23 319018/week @ 2024-03-30 300895/week @ 2024-04-06 296192/week @ 2024-04-13 277988/week @ 2024-04-20 262462/week @ 2024-04-27 263993/week @ 2024-05-04 274730/week @ 2024-05-11 267308/week @ 2024-05-18 250308/week @ 2024-05-25 281757/week @ 2024-06-01 291249/week @ 2024-06-08 293010/week @ 2024-06-15 273843/week @ 2024-06-22 143294/week @ 2024-06-29

1,046,542 每月下载量
1,936 个crate中使用 (直接使用303个)

MIT/Apache

19KB
361

shell-words

根据Unix shell的解析规则处理命令行。

用法

将此添加到Cargo.toml

[dependencies]
shell-words = "1.0.0"

将此添加到您的crate中

extern crate shell_words;

示例

分割

将C源代码编译成可执行文件,类似于GNU Make中默认的构建规则

extern crate shell_words;

use std::env::var;
use std::process::Command;

fn main() {
    let cc = var("CC").unwrap_or_else(|_| "cc".to_owned());

    let cflags = var("CFLAGS").unwrap_or_else(|_| String::new());
    let cflags = shell_words::split(&cflags).expect("failed to parse CFLAGS");

    let cppflags = var("CPPFLAGS").unwrap_or_else(|_| String::new());
    let cppflags = shell_words::split(&cppflags).expect("failed to parse CPPFLAGS");

    Command::new(cc)
        .args(cflags)
        .args(cppflags)
        .args(&["-c", "a.c", "-o", "a.out"])
        .spawn()
        .expect("failed to start subprocess")
        .wait()
        .expect("failed to wait for subprocess");
}

连接

以可以直接复制粘贴到shell的格式记录执行的命令

extern crate shell_words;

fn main() {
    let argv = &["python", "-c", "print('Hello world!')"];

    println!("Executing: {}", shell_words::join(argv));

    std::process::Command::new(&argv[0])
        .args(&argv[1..])
        .spawn()
        .expect("failed to start subprocess")
        .wait()
        .expect("failed to wait for subprocess");
}

错误

请在 https://github.com/tmiasko/shell-words/issues 报告任何问题。

许可证

根据以下任一许可证授权

任选其一。

贡献

除非您明确声明,否则您有意提交给作品以供包含的贡献,根据Apache-2.0许可证定义,将按上述方式双授权,没有任何附加条款或条件。

无运行时依赖

特性