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