You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中向Command传递原始字符串?

请提供需要使用Markdown格式化的具体内容,我会按照给定的规则为你处理。


如果是针对你之前提出的Rust命令执行问题,以下是符合格式要求的回答:

在Rust中无需手动解析引号执行完整命令字符串

直接使用std::process::Command无法直接处理带引号的完整命令字符串,因为它要求明确拆分命令与参数。要绕过手动解析引号分组的问题,有两种可靠方案:

  • 借助系统shell解析执行
    把完整命令交给系统自带的shell处理,由shell负责解析引号、空格等格式。不同系统的shell命令不同:

    use std::process::Command;
    
    let cmd_str = "blah -a 'test arg'";
    // Unix/Linux/macOS 系统用 sh
    let output = Command::new("sh")
        .arg("-c")
        .arg(cmd_str)
        .output()
        .expect("命令执行失败");
    
    // Windows 系统用 cmd
    // let output = Command::new("cmd")
    //     .arg("/c")
    //     .arg(cmd_str)
    //     .output()
    //     .expect("命令执行失败");
    

    这种方式完全不用自己处理解析逻辑,但要注意如果命令字符串包含不可信输入,会存在shell注入风险。

  • 使用第三方库解析命令字符串
    若想避免shell依赖,可使用专门的命令解析库(如shell-words)来按照shell规则拆分字符串。首先在Cargo.toml添加依赖:

    [dependencies]
    shell-words = "1.1.0"
    

    然后编写代码解析并执行:

    use std::process::Command;
    use shell_words::split;
    
    let cmd_str = "blah -a 'test arg'";
    let parts = split(cmd_str).expect("命令字符串解析失败");
    let (cmd, args) = parts.split_first().expect("命令字符串为空");
    
    let output = Command::new(cmd)
        .args(args)
        .output()
        .expect("命令执行失败");
    

    该库会正确处理引号、转义字符等场景,拆分出符合要求的命令与参数列表。

内容的提问来源于stack exchange,提问作者Ricky Han

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:05:33