使用 cat 合并文件
Combine files with cat
我正在尝试使用 Rust 将文件与 cat
合并。下面是一些错误的示例代码,出现以下错误。
use std::process::Command as cmd;
cmd::new("/bin/cat")
.arg("1.txt 2.txt > 3.txt")
.spawn()
.expect("Failure");
/bin/cat: '1.txt 2.txt > 3.txt': No such file or directory
我还尝试将它作为多个参数添加
cmd::new("/bin/cat")
.args("1.txt 2.txt", ">", "3.txt")
.spawn()
.expect("Failure");
哪些错误出
/bin/cat: '1.txt 2.txt': No such file or directory
/bin/cat: '>': No such file or directory
/bin/cat: 3.txt: No such file or directory
我已经尝试过 cmd::new("/bin/sh")
,但这也不起作用。
考虑到评论中的建议,这里有两个例子。
fn main() {
// redirect output from rust
std::process::Command::new("/bin/cat")
.args(["1.txt", "2.txt"])
.stdout(std::fs::File::create("3.txt").unwrap())
.spawn()
.expect("spawn failure")
.wait()
.expect("wait failure");
//
// rely on the shell for redirection
std::process::Command::new("/bin/sh")
.args(["-c", "cat 1.txt 2.txt >3_bis.txt"])
.spawn()
.expect("spawn failure")
.wait()
.expect("wait failure");
}
一个更简单和更强大的解决方案是使用 std::fs
而不是 cat
:
use std::fs;
let file1 = fs::read_to_string("1.txt").expect("1.txt could not be opened");
let file2 = fs::read_to_string("2.txt").expect("2.txt could not be opened");
fs::write("3.txt", file1 + "\n" + &file2).expect("3.txt could not be written");
请注意,这不依赖于 cat
,它适用于所有平台和操作系统,并且允许正确处理每个错误。
我正在尝试使用 Rust 将文件与 cat
合并。下面是一些错误的示例代码,出现以下错误。
use std::process::Command as cmd;
cmd::new("/bin/cat")
.arg("1.txt 2.txt > 3.txt")
.spawn()
.expect("Failure");
/bin/cat: '1.txt 2.txt > 3.txt': No such file or directory
我还尝试将它作为多个参数添加
cmd::new("/bin/cat")
.args("1.txt 2.txt", ">", "3.txt")
.spawn()
.expect("Failure");
哪些错误出
/bin/cat: '1.txt 2.txt': No such file or directory
/bin/cat: '>': No such file or directory
/bin/cat: 3.txt: No such file or directory
我已经尝试过 cmd::new("/bin/sh")
,但这也不起作用。
考虑到评论中的建议,这里有两个例子。
fn main() {
// redirect output from rust
std::process::Command::new("/bin/cat")
.args(["1.txt", "2.txt"])
.stdout(std::fs::File::create("3.txt").unwrap())
.spawn()
.expect("spawn failure")
.wait()
.expect("wait failure");
//
// rely on the shell for redirection
std::process::Command::new("/bin/sh")
.args(["-c", "cat 1.txt 2.txt >3_bis.txt"])
.spawn()
.expect("spawn failure")
.wait()
.expect("wait failure");
}
一个更简单和更强大的解决方案是使用 std::fs
而不是 cat
:
use std::fs;
let file1 = fs::read_to_string("1.txt").expect("1.txt could not be opened");
let file2 = fs::read_to_string("2.txt").expect("2.txt could not be opened");
fs::write("3.txt", file1 + "\n" + &file2).expect("3.txt could not be written");
请注意,这不依赖于 cat
,它适用于所有平台和操作系统,并且允许正确处理每个错误。