Запуск bash скрипта .Net Core 2.2 C#

179
11 декабря 2021, 11:10

Необходимо запустить скрипт написанный на Bash из программы написанной на C# .net core 2.2.

cd /home/jman/myapp/

./test

В программе на С# сделал через запуск команд (хелпер):

 public string RunBashCommand(string cmd, Dictionary<string, string> environmentVariables = null)
    {
        using (var process = new Process())
        {
            process.StartInfo = new ProcessStartInfo
            {
                FileName = "/bin/bash",
                Arguments = $"-c \"{cmd}\"",
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };
            if (environmentVariables != null)
                foreach (var variable in environmentVariables)
                {
                    process.StartInfo.EnvironmentVariables[variable.Key] = variable.Value;
                }
            process.Start();
            var result = process.StandardOutput.ReadToEnd().Trim('\n').Trim('\r');
            process.WaitForExit();
            return result;
        }
    }

И сам вызов:

 private void LoadDevice()
    {
        Console.WriteLine(scriptRunner.RunBashCommand("cd /home/jman/myapp/"));
        Console.WriteLine(scriptRunner.RunBashCommand("./test"));
    }

Запускаю приложение написанное на C# в Ubuntu:

dotnet MyCoreApp.dll

И получаю ошибку:

/bin/bash: test: command not found

Собственно как правильно запустить скрипт?

Answer 1

Итак, благодаря советам @PotroNik удалось запускать Bash скрипты.

Создан класс - хелпер:

public class BashShellHelper
{
    public string RunBashCommand(string cmd, Dictionary<string, string> environmentVariables = null)
    {
        using (var process = new Process())
        {
            process.StartInfo = new ProcessStartInfo
            {
                FileName = "/bin/bash",
                Arguments = $"-c \"{cmd}\"",
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };
            if (environmentVariables != null)
            {
                foreach (var variable in environmentVariables)
                {
                    process.StartInfo.EnvironmentVariables[variable.Key] = variable.Value;
                }
            }
            process.Start();
            var result = process.StandardOutput.ReadToEnd().Trim('\n').Trim('\r');
            process.WaitForExit();
            return result;
        }
    }
    public void RunBushScript(string cmd)
    {
        var process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "/bin/bash",
                Arguments = $"-c \"{cmd}\"",
                RedirectStandardInput = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true
            },
            EnableRaisingEvents = true
        };
        process.Start();
        process.BeginOutputReadLine();
        process.BeginErrorReadLine();
    }
}

в основной программе реализованы следующие методы:

  private readonly BashShellHelper scriptRunner =
        new BashShellHelper();
 private readonly loadDevScript = "cd /home/jman/myapp/;./test_load";
 private readonly unloadDevScript = "cd /home/jman/my_second_app/;./test_unload";
 public void LoadDevice()
    {
        Console.WriteLine(scriptRunner.RunBashCommand($"{loadDevScript}"));
    }

И метод запускающий скрипт для выгрузки устройства:

public void UnloadDevice()
    {
        deviceManager.CloseDevice();
        Console.WriteLine(scriptRunner.RunBashCommand($"{unloadDevScript}"));
    }
READ ALSO
Группа в контакте несколько раз генерирует одни и те же запросы!

Группа в контакте несколько раз генерирует одни и те же запросы!

Написал чат бота и после того как ему задаёшь вопрос он отвечает но постоянно повторяет сообщение после отправкиПотом отключил его, но сегодня...

94
Проверка пользователя ajax

Проверка пользователя ajax

Есть кнопка в игре "Купить"При нажатии на неё через Ajax отправляются данные о юзере (Id, имя) и обрабатываются далее php скриптом (снимается баланс,...

253
Отношения многие ко многим, как добавлять существующие значения в таблицу, если они уникальны?

Отношения многие ко многим, как добавлять существующие значения в таблицу, если они уникальны?

Вообщем у меня есть код, который добавляет Теги из ArticleController - в таблицу Tag значения(поле алиас уникальное), и сохраняется в промежуточную таблицу...

89