如何在 Rust 中运行命令

Muc*_*Mop 1 linux rust

我想在 Rust 中运行命令?我知道Command::new(),但运行此命令时遇到问题: nohup gdx-open ~/Documents &

Jmb*_*Jmb 5

nohup&是特定于 shell 的结构,告诉您的 shell 不要等待命令完成。它们根本不是你命令的一部分,所以你想要的是:

let handle = Command::new("gdx-open")
                    .args(&["~/Documents"])
                    .spawn()
                    .unwrap();
Run Code Online (Sandbox Code Playgroud)

如果您想等待命令完成后再继续,您可以使用:

let result = Command::new("gdx-open")
                    .args(&["~/Documents"])
                    .status()
                    .unwrap();
Run Code Online (Sandbox Code Playgroud)

或者

let output = Command::new("gdx-open")
                    .args(&["~/Documents"])
                    .output()
                    .unwrap();
Run Code Online (Sandbox Code Playgroud)

此外,它~也是特定于 shell 的构造,您尝试运行的命令可能会也可能不会理解它。它的意思是“此用户的主目录”,您可以HOME使用以下命令从环境变量中获取它std::env::var

let path = format!(
    "{}/Documents", 
    std::env::var ("HOME").unwrap_or_else (|_| "".into()));
let handle = Command::new("gdx-open")
                    .args(&[&path])
                    .spawn()
                    .unwrap();
Run Code Online (Sandbox Code Playgroud)

顺便说一句,是一个特殊的路径,是XDG 用户目录~/Documents规范的一部分。它的实际位置取决于平台和语言(即根据用户的配置进行翻译)。它也可以被用户覆盖。您可能需要查看板条箱以获得正确的值:directories

use directories::UserDirs;
let dirs = UserDirs::new();
let path = dirs
    .and_then (|u| u.document_dir())
    .unwrap();
let handle = Command::new("gdx-open")
                    .args(&[path])
                    .spawn()
                    .unwrap();
Run Code Online (Sandbox Code Playgroud)