C# 在当前终端中执行命令,而不打开新终端。
我有一个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/
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
}
}
}