目标,在Rust程序里解压.tar.bz2压缩包。
折腾了大半天,走了很多弯路。一是经验不足,没有及时想到合适的Shell,二是我的应用场景是在Windows系统下调用Linux命令行,难度较大。
一开始就想到std::process::Command
,要执行的是一个SHELL进程,参数有两个,参数1是"/C"或"-c",参数2是命令行。此信息Command的docs里有明示,还有例子。只是我此前理解不深入,把tar当作进程、把-xvf
等当作tar的参数,一开始起点就偏了。把tar当进程勉强还行(Windows10系统目录里有tar.exe),可要解压的是.tar.bz2文件,tar还得另外调用bzip2进程,后面直接就报莫名其妙的错误。后来我把Git安装目录里的usr/bin/sh.exe当作SHELL做了很多尝试都失败了(其实距离git-bash.exe仅有一步之遥,偏偏当时想不到),最大的问题是它大概率会在解压过程中卡死,成功率极低,原因不明。
在用Command没搞定的情况下,我又尝试了多种其它方法:
- 使用tar库能解压.tar不能解压.tar.bz2文件;
- 使用zip库解压.tar.bz2文件时报文件头错误;
- 使用bzip2库只能处理数据流不涉及文件操作;
- 用7z.exe解压它先解出.tar不能一步到位。
最后又回到Command执行SHELL的路子,引入git-bash.exe才最终搞定。
- 总结1:Linux SHELL的参数1为"-c&#