.Net Core exécuter des commandes Bash/Shell

Maintenant que .Net Core fonctionne sur Linux, on est tenté d’utiliser la puissance de cette OS mais aussi des applications qui y fonctionnes.
Mais n’oublions pas non plus les utilisateurs de Windows.

Je vous propose ici un code très légèrement remanié dont la source se trouve ici : https://loune.net/2017/06/running-shell-bash-commands-in-net-core/.
Dans le cas où vous voulez faire fonctionner des appels à Bash sous Windows, pensé à installer Git.
Car c’est sur lui que je me repose pour avoir l’exécutable du Bash.

    public static class ShellHelper
    {
        public static string Bash(this string cmd)
        {
            string bashPath = System.Runtime.InteropServices.RuntimeInformation.OSDescription.ToLower().Contains("windows")
                ? "C:\\Program Files\\Git\\bin\\bash.exe"
                :"/bin/bash";

            if (!File.Exists(bashPath))
            {
                throw new System.Exception("Bash n'est pas installé sur ce système");
            }

            var escapedArgs = cmd.Replace("\"", "\\\"");
            
            var process = new Process()
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = bashPath,
                    Arguments = $"-c \"{escapedArgs}\"",
                    RedirectStandardOutput = true,
                    UseShellExecute = false,
                    CreateNoWindow = true,
                }
            };

            process.Start();

            string result = process.StandardOutput.ReadToEnd();

            process.WaitForExit();

            return result;
        }
    }
}

Comme expliquer pas son auteur original, ce code est une méthode d’extension. Donc après avoir importé le namespace, vous pouvez l’utiliser comme suit :

var output = "ps aux".Bash(); 

output va contenir le STDOUT résultant. Le STDERR n’est pas capturé par la méthode. Mais cela peut être fait de manière simple en changeant la propriété RedirectStandardOutput et en lisant le contenu de process.StandardError

Publié dans .Net Core

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*