Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在当前终端中执行命令,而不打开新终端。_C#_Linux_Process_Terminal_Mono - Fatal编程技术网

C# 在当前终端中执行命令,而不打开新终端。

C# 在当前终端中执行命令,而不打开新终端。,c#,linux,process,terminal,mono,C#,Linux,Process,Terminal,Mono,我有一个c#应用程序正在终端上运行。它打开一个新的终端以执行某个命令,然后关闭该终端。我想知道我是否可以在当前打开的终端上执行这个命令,而不是打开一个新的终端。我执行该命令的代码如下所示 Process proc = new System.Diagnostics.Process(); proc.StartInfo.WorkingDirectory = @"MyDirectory"; proc.StartInfo.FileName = @"/usr/

我有一个c#应用程序正在终端上运行。它打开一个新的终端以执行某个命令,然后关闭该终端。我想知道我是否可以在当前打开的终端上执行这个命令,而不是打开一个新的终端。我执行该命令的代码如下所示

        Process proc = new System.Diagnostics.Process();
        proc.StartInfo.WorkingDirectory = @"MyDirectory";
        proc.StartInfo.FileName = @"/usr/bash";
        proc.StartInfo.Arguments = command;
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.Start();

如何在不打开新终端的情况下重写此代码?

据我所知,没有-但您可以使用此代码

startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

使其不会弹出窗口。然后,在您的普通终端中,您可以使用print以类似“Running Script…”的消息更新用户。

您可以直接使用libc系统而不是Diagnostics.Process和重定向管道(仅包装libc功能):


您可以隐藏新的终端,但它总是在自己的进程中运行。除非您自己模拟shell命令。因为您使用的是“UseShellExecute=false”,所以您可以使用“system”来执行您的“命令”,除非您实际上是在对重定向输出执行某些操作。如果是这样的话,你为什么要用bash来运行“command”?在Windows控制台应用程序中,只需设置UseShellExecute-w/o redirection或其他任何东西,对我来说就行了。看,谢谢你的回答。它不是用户使用的东西,所以如果生成另一个终端也不是什么大问题。让一个终端打开另一个终端似乎很奇怪。但我以前在一个项目中遇到过这个问题,如果我不得不再次做类似的事情,您的解决方案将帮助我。非常感谢。
using System;
using System.Runtime.InteropServices;

namespace ShellMe
{
    class MainClass
    {
        [DllImport ("libc")]
        private static extern int system (string exec);

        public static void Main (string[] args)
        {
            system("YourCommand2Run");   // blocking, you are in a shell so same rules apply
            system("YourCommand2Run &"); // non-blocking
        }
    }
}