在。net核心下运行命令,但运气不好。
我有一个基本的命令,我想执行如下:
mysqldump -h ... -u ... -p... -P 3306 name > backup_020423_153050.sql
我已经写了一个c#类来为我做这件事:
public static void RunShellCommand(string command, string arguments)
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = command,
Arguments = arguments,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
},
};
process.Start();
process.WaitForExit();
var output = process.StandardOutput.ReadToEnd();
var error = process.StandardError.ReadToEnd();
if (!string.IsNullOrEmpty(output))
{
Console.WriteLine(output);
}
if (!string.IsNullOrEmpty(error))
{
Console.WriteLine(error);
}
}
这样称呼:
TerminalUtilities.RunShellCommand(command, $"-h {host} -u {username} -p{password} -P {port} {databaseName} > {fileName}");
虽然我得到
mysqldump: could 't find table: ">">
这是怎么回事?我猜c#对输入做了一些奇怪的事情。
您传递了一个> {fileName}
部件作为参数,因此mysqldump
尝试解析这些参数,并威胁>
符号作为表名。
我假设您想将mysqldump
输出重定向到文件中。在这种情况下,您不应该将> {fileName}
作为参数传递,而应该配置标准输出重定向。您可以使用Process.RedirectStandardOutput
。重定向进程输出c#或重定向输出到文本文件c#(请注意,答案使用cmd
及其执行重定向的功能)。不求最好,只求兴趣。