【问题标题】:How to execute a linux shell script from a C# application?如何从 C# 应用程序执行 linux shell 脚本?
【发布时间】:2017-05-25 08:22:39
【问题描述】:

我有一个 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

如何在没有任何手动输入的情况下从我的应用程序中自动执行脚本?

【问题讨论】:

  • 尝试 psi.Arguments = "--login -c /cygdrive/e/Work/sync.sh /cydrive/e/Work/Voice/Temp";
  • 不起作用。显示错误 - “没有这样的文件或目录”

标签: c# linux bash shell cygwin


【解决方案1】:

在做了一些谷歌搜索之后,我找到了一种方法。我所要做的就是将"--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);

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多