为何compgen命令在Linux终端可用,用Rust的process::Command调用却报错?
解决Rust调用compgen命令触发panic的问题
我来帮你搞定这个问题!你遇到的panic其实是因为**compgen不是独立的可执行文件**——它是Bash shell的内置命令,只能在Bash环境里运行,而Rust的Command::new()默认是去系统PATH里找独立的二进制程序,自然找不到它,所以才会触发报错。
修复后的代码
你需要通过调用Bash来间接执行compgen,具体写法如下:
use std::process::Command; fn main() { let status = Command::new("bash") .arg("-c") .arg("compgen") .status() .expect("failed to execute process"); println!("process exited with: {}", status); }
代码解释
Command::new("bash"):启动Bash进程作为执行载体.arg("-c"):告诉Bash要执行后续传入的命令字符串.arg("compgen"):指定要运行的内置命令本身
如果需要给compgen传递参数(比如-a补全别名、-c补全命令),直接把参数加到命令字符串里即可,例如.arg("compgen -a")。修改后程序就能正常调用compgen并获取执行状态了。
内容的提问来源于stack exchange,提问作者user103766
相关产品推荐
相关产品推荐

