使用 .Net Core 在 linux 机器上查找内核数失败并出现错误(未终止的引用字符串)

Posted

技术标签:

【中文标题】使用 .Net Core 在 linux 机器上查找内核数失败并出现错误(未终止的引用字符串)【英文标题】:Find number of cores on a linux machine using .Net Core failed with error (Unterminated quoted String) 【发布时间】:2018-01-25 12:21:24 【问题描述】:

我在 .Net Core 中编写了以下代码来检索运行 Ubuntu 操作系统的机器的内核数。

var proc = new Process

   StartInfo = new ProcessStartInfo
   
      FileName = "/bin/sh",
      Arguments = "-c 'grep \"$0\" /proc/cpuinfo | uniq | sed -e \"$1\"' \"cpu cores\" 's/[^0-9]*//g'",
      UseShellExecute = false,
      RedirectStandardOutput = true,
      CreateNoWindow = true
   
;

proc.Start();
string line = proc.StandardOutput.ReadToEnd();

如果我在 putty 上执行该命令会给出预期的结果,但是当我尝试在我的 .Net Core 代码中运行它时会失败并出现错误。

错误:$0: 1: $0: 语法错误:未终止的带引号的字符串

有任何 sh 和 .Net-Core 专家可以解释我的代码有什么问题吗?

【问题讨论】:

从命令行运行时,您的命令不会为我返回任何内容。所以我的 cpuinfo 包含它。 如果直接在 shell 上执行,我会在我的机器上返回 '2' 作为答案 个人 ID 坚持使用更简单的方法:grep "cpu cores" /proc/cpuinfo | awk -F: 's+=$2 END print s' 运行 sh -c $'grep \"$0\" /proc/cpuinfo |独特 | sed -e \"$1\"' \"cpu cores\" 's/[^0-9]*//g' 完全没有返回任何内容 试试这个 /bin/sh -c 'grep "$0" /proc/cpuinfo |独特 | sed -e "$1"' "cpu cores" 's/[^0-9]*//g' 【参考方案1】:

在您的参数字符串之前放置一个@ 以使其成为逐字字符串。您的字符串现在将反斜杠作为转义序列。

var proc = new Process

   StartInfo = new ProcessStartInfo
   
      FileName = "/bin/sh",
      Arguments = @"-c $'grep \""$0\"" /proc/cpuinfo | uniq | sed -e \""$1\"" \""cpu cores\"" 's/[^0-9]*//g''",
      UseShellExecute = false,
      RedirectStandardOutput = true,
      CreateNoWindow = true
   
;

【讨论】:

我之前也尝试过,并尝试运行您的代码,但它仍然给出相同的错误,即“$0”:1:“$0”:语法错误:未终止的引用字符串 @HaseebJadoon 我更新了我的答案。也许它在正则表达式 's/[^0-9]*//g'' 末尾缺少单引号 No 还是不行。我们需要以某种方式解决这个论点。 Impressive mine 在没有参数的情况下也能做到这一点......或者 sh 命令和一切

以上是关于使用 .Net Core 在 linux 机器上查找内核数失败并出现错误(未终止的引用字符串)的主要内容,如果未能解决你的问题,请参考以下文章

使用 .Net Core 在 linux 机器上查找内核数失败并出现错误(未终止的引用字符串)

从 Linux 机器上的 .Net Core 应用程序获取进程的内存使用情况

是否可以设置 Visual Studio 2017,使其在远程 Linux 机器而不是本地机器上运行和调试 .NET Core C# 应用程序?

使用 Docker 在 Linux 上托管 ASP.NET Core 应用程序

ASP.NET Core在CentOS上的最小化部署实践

优雅地杀死在 Linux 上运行的 .NET Core 守护进程