如何从 C# 应用程序执行 linux shell 脚本?
How to execute a linux shell script from a C# application?
我有一个 linux shell 脚本,我可以在 windows 中用 CygWin 终端手动执行它。
sh E://Work/sync.sh E://Work/Voice/Temp
但是当我尝试使用相同的参数 运行 我的 C# 应用程序中的 shell 脚本时遇到了一些困难。
string command = "E://Work/sync.sh E://Work/Voice/Temp";
ProcessStartInfo psi = new ProcessStartInfo(@"C:\cygwin64\bin\bash.exe", command);
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = Process.Start(psi);
Console.WriteLine(p.StandardError.ReadToEnd());
Console.WriteLine(p.StandardOutput.ReadToEnd());
它给我错误:
E://Work/sync.sh: line 47: rm: command not found
E://Work/sync.sh: line 48: mkdir: command not found
E://Work/sync.sh: line 50: ls: command not found
E://Work/sync.sh: line 59: ls: command not found
E://Work/sync.sh: line 60: rmdir: command not found
然后我尝试了不同的方法。
ProcessStartInfo psi = new ProcessStartInfo(@"C:\cygwin64\bin\bash.exe");
psi.Arguments = "--login -c sh E://Work/sync.sh E://Work/Voice/Temp";
Process p = Process.Start(psi);
这将启动一个 CygWin 命令提示符,如下所示:
然后,如果我手动输入我的命令,它就会起作用。
E://Work/sync.sh E://Work/Voice/Temp
如何在没有任何手动输入的情况下从我的应用程序自动执行脚本?
在进行了一些 google 搜索之后,我找到了一种方法。我所要做的就是将 "--login -c"
更改为 "--login -i"
ProcessStartInfo psi = new ProcessStartInfo(@"C:\cygwin64\bin\bash.exe");
psi.Arguments = "--login -i E://Work/sync.sh E://Work/Voice/Temp";
Process p = Process.Start(psi);
我有一个 linux shell 脚本,我可以在 windows 中用 CygWin 终端手动执行它。
sh E://Work/sync.sh E://Work/Voice/Temp
但是当我尝试使用相同的参数 运行 我的 C# 应用程序中的 shell 脚本时遇到了一些困难。
string command = "E://Work/sync.sh E://Work/Voice/Temp";
ProcessStartInfo psi = new ProcessStartInfo(@"C:\cygwin64\bin\bash.exe", command);
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = Process.Start(psi);
Console.WriteLine(p.StandardError.ReadToEnd());
Console.WriteLine(p.StandardOutput.ReadToEnd());
它给我错误:
E://Work/sync.sh: line 47: rm: command not found
E://Work/sync.sh: line 48: mkdir: command not found
E://Work/sync.sh: line 50: ls: command not found
E://Work/sync.sh: line 59: ls: command not found
E://Work/sync.sh: line 60: rmdir: command not found
然后我尝试了不同的方法。
ProcessStartInfo psi = new ProcessStartInfo(@"C:\cygwin64\bin\bash.exe");
psi.Arguments = "--login -c sh E://Work/sync.sh E://Work/Voice/Temp";
Process p = Process.Start(psi);
这将启动一个 CygWin 命令提示符,如下所示:
然后,如果我手动输入我的命令,它就会起作用。
E://Work/sync.sh E://Work/Voice/Temp
如何在没有任何手动输入的情况下从我的应用程序自动执行脚本?
在进行了一些 google 搜索之后,我找到了一种方法。我所要做的就是将 "--login -c"
更改为 "--login -i"
ProcessStartInfo psi = new ProcessStartInfo(@"C:\cygwin64\bin\bash.exe");
psi.Arguments = "--login -i E://Work/sync.sh E://Work/Voice/Temp";
Process p = Process.Start(psi);