【问题标题】:Execute .sh (bash scripts) file via "/bin/bash" in Linux with .NET Core使用 .NET Core 在 Linux 中通过“/bin/bash”执行 .sh(bash 脚本)文件
【发布时间】:2019-07-25 20:46:04
【问题描述】:

操作系统:Linux 4.15.0-48-generic #51-Ubuntu
框架:.NET Core 4.6.27817.03

我在下面有以下sample.sh 文件:

 #!/bin/bash
 netstat --tcp --listen --numeric-ports -p

以及执行此文件的以下函数:

string filePathExecute = "./Assets/SystemTests/sample.sh";
FileInfo fileInfo = new FileInfo(filePathExecute);
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = true;
startInfo.FileName = "/bin/bash";
startInfo.Arguments = $"\"{fileInfo.FullName}\"";
Process process = Process.Start(startInfo);

但我得到以下输出:

xdg-open: unexpected argument '/home/{filePathHere}/Assets/SystemTests/sample.sh'
Try 'xdg-open --help' for more information.

如何让我的应用程序打开一个新的终端窗口并在其中运行sample.sh

【问题讨论】:

  • .NET Core 的实际版本是什么? 3.0还没有发布,所以4.6是不可能的。
  • NET Core 2.2.6(CoreCLR 4.6.27817.03,CoreFX 4.6.27818.02)

标签: c# linux bash .net-core


【解决方案1】:

经过 10 分钟的试验,一个经典的发现解决方案发生了。 不知道为什么,但是在跟随标志之后,它开始工作了:

startInfo.UseShellExecute = false;

我不在 Windows 上运行 powershell.ps1 文件时执行此操作。 此外,此方法还没有打开新窗口,在相同的窗口上运行,但现在它现在可以工作了。

【讨论】:

  • 当心! UseShellExecute 在不同时间点在 .NET Core 中的含义发生了变化:github.com/dotnet/corefx/issues/24704。就像 Windows 一样,UseShellExecute 说“在新窗口中打开这个文件/文档”,而 xdg-open(Linux 上的后端)不知道如何在此处处理 .sh 文件(应该打开它们吗?执行它们?调出一个文本编辑器?)。
  • 是的,它的运行方式并不完全符合我的预期,但就目前而言,我会接受它。除了运行一些基本的 Linux Admin 命令之外,我并没有做非常花哨/危险的事情。
  • 值得一提的是:.NET Core 中大多数谈论打开新窗口的 API 在 Linux 上都是无操作的。 .NET Core(在 Linux 上)不支持打开新窗口。 CreateNoWindow 的值从未使用过。
  • 它在 Windows 10 中打开一个新窗口(至少对于 powershell 和 cmd),但在 Linux 上没有运气。
猜你喜欢
  • 2016-07-22
  • 2017-01-03
  • 2018-11-22
  • 2013-11-01
  • 1970-01-01
  • 2014-07-07
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多