Ищу способ позвонить в pacman и сделать через MINGW64 в C# - PullRequest
0 голосов
/ 21 июня 2020

Итак, я работаю над утилитой для создания GUI для клонирования, обновления и, в конечном итоге, компиляции проекта GitHub. Я уже создал сценарий, который делает то же самое через терминал MSYS2 напрямую, но у меня возникают проблемы с тем, чтобы те же самые команды работали в C# GUI. Мне посчастливилось вызвать тот же сценарий из GUI одним нажатием кнопки, но я хотел бы иметь возможность упаковать все как отдельный исполняемый файл, а не связывать его со сценарием, хотя я сделаю это, если это к чему все сводится в итоге.

Вот что у меня есть (с удалением некоторых операторов if для управления дополнительными аргументами):

ProcessStartInfo compileStart = new ProcessStartInfo();
compileStart.FileName = this.textMSYS2.Text + "\\usr\\bin\\mintty.exe";
this.outputText.Text += "Configuring MSYS2 process...\n";

compileStart.Arguments += "-h always /bin/env MSYSTEM=MINGW64 /bin/bash -l ";

compile.StartInfo = compileStart;
compile.Start();
compile.WaitForExit();

В его нынешнем виде он не работает, если я добавьте вызовы pacman или make или даже простой вызов dir. Возвращаемые ошибки выглядят следующим образом:

/usr/bin/make: /usr/bin/make: cannot execute binary file
/bin/env: Exit 126.

Однако, если я вызываю свой ./install.sh скрипт, скрипт выполняется без проблем, и окно MINGW64 даже остается открытым после того, как это сделано. Любое понимание того, как я могу заставить это работать, не упаковывая вместе с ним скрипт, было бы признательно.

1 Ответ

0 голосов
/ 21 июня 2020

Думаю, вам не хватает -c рядом с -l. Bash имеет три режима работы (может быть и больше, но на данный момент это неактуально):

  • -i: интерактивный; принимает отдельные команды, подаваемые через стандартный ввод
  • -c FOO: выполнить команду FOO
  • foo.sh: интерпретировать сценарий оболочки foo.sh

В вашем В этом случае вы предоставляете команды, но Bash пытается интерпретировать их как имена файлов сценариев оболочки.

...