如何通过System.Diagnostics.Process()将参数传递给已打开的终端

时间:2016-06-04 08:53:53

标签: c# bash process terminal

我一直在搞乱通过C#触发bash脚本。当我第一次使用参数调用“open”命令时,这一切都正常工作,而这些参数又通过Terminal打开我的.command脚本。

一旦使用“open”命令,终端或iTerm将在后台保持打开状态,此时使用参数调用“open”命令则没有进一步的效果。遗憾的是,我必须手动退出应用程序以再次触发我的脚本。

如何在不退出的情况下将参数传递给已打开的终端应用程序以重启我的脚本?

我在线搜索广告似乎无法解决,它已经花了很多时间解决了开放代码。非常感谢您的帮助。

以下是我用来启动该过程的C#代码:

    ProcessStartInfo startInfo = new ProcessStartInfo("/bin/bash");
    startInfo.WorkingDirectory = installFolder;
    startInfo.UseShellExecute = false;
    startInfo.RedirectStandardInput = true;
    startInfo.RedirectStandardOutput = true;

    Process process = new Process();
    process.StartInfo = startInfo;
    process.Start();

    process.StandardInput.WriteLine("echo helloworld");
    process.StandardInput.WriteLine("exit");  // if no exit then WaitForExit will lockup your program
    process.StandardInput.Flush();

    string line = process.StandardOutput.ReadLine();

    while (line != null)
    {
        Debug.Log("line:" + line);
        line = process.StandardOutput.ReadLine();
    }
    process.WaitForExit();
    //process.Kill(); // already killed my console told me with an error

由于

编辑: 这两个答案都是正确的,这可能有助于其他人:

function themechange(themeValue) {

    $('#themeId').attr('href', '/zcv/resources/css' + '/' + 'theme-' + themeValue.toLowerCase() + '.css');
    $.ajax({
        url: '@Url.Action("ChangeTheme", "Login")',
        type: 'GET',
        dataType: 'json',
        cache: false,
        data: { 'themeValue': themeValue },
        success: function (data) {
           alert(data);
        },
        error: function () {
           alert('Error occured');
        }
   });
}

2 个答案:

答案 0 :(得分:3)

您可以尝试:

在致电p.Start()之前:

p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
// for the process to take commands from you, not from the keyboard

之后:

if (p != null)
{
    p.StandardInput.WriteLine("echo helloworld");
    p.StandardInput.WriteLine("executable.exe arg1 arg2");
}

(摘自here

答案 1 :(得分:0)

这是您可能正在寻找的:

  

获取用于写入应用程序输入的流。

MSDN | Process.StandardInput Property

// This could do the trick
process.StandardInput.WriteLine("..");