执行cat命令覆盖文件
Execute cat command to overwrite file
我正在尝试从我的 C# 代码执行 cat 命令,但我 运行 遇到了问题。
所以,这只是一个非常简单的测试,但我最终得到了错误:
错误: cat: '>': 没有那个文件或目录
现在...源文件和目标文件都实际存在..如果目标文件不存在,结果相同。
如果我在 Raspberry Pi 上打开一个控制台,它执行得很好。非常感谢任何帮助。
我的代码:
var srcFile = "/home/pi/tm-satellite/Helpers/wpa_supplicant.conf";
var outFile = "/home/pi/tm-satellite/network-test.txt";
StringBuilder sb = new StringBuilder();
var info = new ProcessStartInfo();
info.FileName = "/bin/bash";
info.Arguments = $"-c 'cat {srcFile} > {outFile}'";
info.UseShellExecute = false;
info.CreateNoWindow = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
var p = Process.Start(info);
//* Read the output (or the error)
sb.AppendLine($"Args: {info.Arguments}");
sb.AppendLine($"Output: {p!.StandardOutput.ReadToEnd()}");
sb.AppendLine($"Error: {p!.StandardError.ReadToEnd()}");
p!.WaitForExit();
return $"Overwrite system file {path}: {p.ExitCode}{Environment.NewLine}{sb}";
这是因为您将 cat
程序传递给 >
参数。
>
仅在 bash
或 sh
过程中有意义,它告诉解释器 stdout
输出应转储到 file
。这不是 cat
.
的有效参数
要解决这个问题,请在 shell:
中调用 cat
进程
sh -c 'cat file1 > file2'
在 C# 中
var srcFile = "/home/pi/tm-satellite/Helpers/wpa_supplicant.conf"
var outFile = "/home/pi/tm-satellite/network-test.txt"
var info = new ProcessStartInfo();
info.FileName = "sh";
info.Arguments = $"-c 'cat {srcFile} > {outFile}'";
或者,您可以使用 C# 的 File
实用程序读取第一个文件并将其内容写入第二个文件,因为操作较少 I/O 可能会更快。
我已经修复了样本。使用双引号代替单引号:
var srcFile = "~/bad";
var outFile = "~/good";
var pInfo = new ProcessStartInfo()
{
FileName = "sh",
Arguments = $"-c \"cat {srcFile} > {outFile}\""
};
var process = Process.Start(pInfo);
process.WaitForExit();
我正在尝试从我的 C# 代码执行 cat 命令,但我 运行 遇到了问题。
所以,这只是一个非常简单的测试,但我最终得到了错误:
错误: cat: '>': 没有那个文件或目录
现在...源文件和目标文件都实际存在..如果目标文件不存在,结果相同。
如果我在 Raspberry Pi 上打开一个控制台,它执行得很好。非常感谢任何帮助。
我的代码:
var srcFile = "/home/pi/tm-satellite/Helpers/wpa_supplicant.conf";
var outFile = "/home/pi/tm-satellite/network-test.txt";
StringBuilder sb = new StringBuilder();
var info = new ProcessStartInfo();
info.FileName = "/bin/bash";
info.Arguments = $"-c 'cat {srcFile} > {outFile}'";
info.UseShellExecute = false;
info.CreateNoWindow = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
var p = Process.Start(info);
//* Read the output (or the error)
sb.AppendLine($"Args: {info.Arguments}");
sb.AppendLine($"Output: {p!.StandardOutput.ReadToEnd()}");
sb.AppendLine($"Error: {p!.StandardError.ReadToEnd()}");
p!.WaitForExit();
return $"Overwrite system file {path}: {p.ExitCode}{Environment.NewLine}{sb}";
这是因为您将 cat
程序传递给 >
参数。
>
仅在 bash
或 sh
过程中有意义,它告诉解释器 stdout
输出应转储到 file
。这不是 cat
.
要解决这个问题,请在 shell:
中调用cat
进程
sh -c 'cat file1 > file2'
在 C# 中
var srcFile = "/home/pi/tm-satellite/Helpers/wpa_supplicant.conf"
var outFile = "/home/pi/tm-satellite/network-test.txt"
var info = new ProcessStartInfo();
info.FileName = "sh";
info.Arguments = $"-c 'cat {srcFile} > {outFile}'";
或者,您可以使用 C# 的 File
实用程序读取第一个文件并将其内容写入第二个文件,因为操作较少 I/O 可能会更快。
我已经修复了样本。使用双引号代替单引号:
var srcFile = "~/bad";
var outFile = "~/good";
var pInfo = new ProcessStartInfo()
{
FileName = "sh",
Arguments = $"-c \"cat {srcFile} > {outFile}\""
};
var process = Process.Start(pInfo);
process.WaitForExit();