C# выполнить терминальную команду в Linux

Я хочу, чтобы мое приложение на C# (которое я выполняю на Raspberry Pi) запускало скрипт bash при каждом запуске.
в основном: скрипт находится в /etc/init.d и назван mnw, Я хочу, чтобы при запуске моего приложения на C# оно выполняло часть сценария mnw.
Если бы это было написано в терминале, это выглядело бы так:

cd /etc/init.d
./mnw stop

Я хочу, чтобы это произошло прямо в начале public static void Main()Я пытался

ProcessStartInfo startInfo = new ProcessStartInfo() { FileName = "/dev/init.d/./mnw", Arguments = "stop", }; 
Process proc = new Process() { StartInfo = startInfo, };
proc.Start();

но это говорит, что остановка - неожиданный аргумент, есть идеи?

2 ответа

Решение

Я никогда не пользовалась ProcessStartInfo на Mono / Linux, но вы пробовали звонить через bash?

ProcessStartInfo startInfo = new ProcessStartInfo() { FileName = "/bin/bash", Arguments = "/dev/init.d/mnw stop", }; 
Process proc = new Process() { StartInfo = startInfo, };
proc.Start();

Также нет проблем с исполняемым битом на mnw?

При использовании Processкласс, как в принятом ответе, работает, я хотел бы добавить, что есть библиотека под названием CliWrap , которая значительно упрощает такие вызовы CLI:

  • свободный API для создания вызовов
  • асинхронная поддержка
  • вызов с пользовательскими переменными среды
  • установить рабочий каталог
  • возможность передавать stdout/stderr в строку
  • получить код выхода
  • и т.п.

используя вопрос OP в качестве примера:

      var result = await Cli
                  .Wrap("/dev/init.d/mnw")
                  .WithArguments("stop")
                  .ExecuteBufferedAsync();

// result contains:
// -- result.StandardOutput  (string)
// -- result.StandardError   (string)
// -- result.ExitCode        (int)
// -- result.StartTime       (DateTimeOffset)
// -- result.ExitTime        (DateTimeOffset)
// -- result.RunTime         (TimeSpan)

if (result.ExitCode != 0)
    Console.WriteLine("Command failed")

Спасибо user2205454 за эту библиотеку!

Другие вопросы по тегам