2017-08-17 2 views
0

J'ai trouvé le code suivant dans .Net Core.J'ai trouvé le code suivant dans .Net Core pour récupérer le nombre de cœurs d'une machine exécutant un système d'exploitation 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(); 

La commande donne résultat escompté si je l'exécute sur le mastic mais échoue avec l'erreur lorsque je tente de l'exécuter dans mon code .Net de base.

Erreur: $ 0: 1: $ 0: Erreur de syntaxe: non terminée chaîne entre guillemets

Tous sh et expert .Net-Core qui peut expliquer ce qui ne va pas avec mon code?

+0

votre commande renvoie rien pour moi lorsqu'il est exécuté depuis la ligne de commande .. donc et mon cpuinfo a dans. – BugFinder

+0

Je ne retourne « 2 » comme une réponse sur ma machine si elle est exécutée directement sur la coque –

+0

Personnellement Id ont collé avec un plus simple: grep "cpu cores"/proc/cpuinfo | awk -F: '{s + = $ 2} FIN {print s}' – BugFinder

Répondre

1

Mettez un @ avant votre chaîne d'argument pour en faire une chaîne verbatim. Votre chaîne a maintenant le backslash comme séquence d'échappement.

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

J'ai essayé cela plus tôt et j'ai essayé d'exécuter votre code, mais il donne toujours la même erreur, à savoir "$ 0": 1: "$ 0": Erreur de syntaxe: Chaîne entre guillemets –

+0

@HaseebJadoon I Mise à jour de ma réponse. Peut-être que c'est la citation unique manquante à la fin de la regex 's/[^ 0-9] * // g' ' –

+0

Non ne fonctionne toujours pas. Nous devons aborder l'argument d'une manière ou d'une autre. –