Чтобы запустить сценарий оболочки Bash в MSYS2 без отображения окна, вы должны щелкнуть правой кнопкой мыши на рабочем столе или в другом месте в проводнике Windows, выбрать «Создать», выбрать «Ярлык», а затем ввести что-то вроде этого для цели ярлыка:
C:\msys64\usr\bin\mintty.exe -w hide /bin/env MSYSTEM=MINGW64 /bin/bash -l /c/Users/rom1v/project/release.sh
Обратите внимание, что здесь есть 4 пути. Пути к mintty
и release.sh
являются абсолютными путями, которые вам нужно будет настроить. Пути к env
и bash
относятся к каталогу установки MSYS2. Также обратите внимание, что первый путь должен быть стандартным путем Windows, поскольку Windows ожидает его при запуске ярлыка.
Объяснение
Может показаться странным использовать MinTTY
для неинтерактивного сценария, но нам нужно использовать какую-то программу, скомпилированную для подсистемы Windows (опция -mwindows
для GCC), иначе Windows автоматически запустит новый консоль, когда мы запускаем программу. Мы передаем параметр -w hide
в MinTTY, чтобы указать ему не показывать окно. Все после этой опции интерпретируется MinTTY
как команда для запуска.
Таким образом, MinTTY запустит /bin/env
из дистрибутива MSYS2 и передаст ему остальные аргументы. Это удобная утилита, которая на самом деле является стандартной частью Linux, а также MSYS2. Он устанавливает для переменной среды MSYSTEM
значение MINGW64
(что важно позже), а затем запускает /bin/bash
с остальными аргументами командной строки.
Мы передаем -l
в Bash, чтобы он действовал как сценарий входа и запускал определенные сценарии запуска. В частности, сценарий /etc/profile
из MSYS2 важен, потому что он просматривает переменную среды MSYSTEM
, видит, что это MINGW64
, а затем устанавливает набор других переменных среды (например, PATH
), чтобы предоставить вам 64-битную среду оболочки MinGW.
Наконец, мы передаем имя вашего скрипта в качестве основного аргумента bash
, поэтому он запустит этот скрипт после запуска скриптов инициализации.
Обработка ошибок
Обратите внимание, что если в вашем сценарии Bash есть ошибка, вы не получите никакого уведомления, потому что приведенный выше ярлык не открывает никаких окон консоли. Лично меня это бы очень раздражало. Я бы, вероятно, удалил параметр -w hide
, а затем сделал сценарий bash-оболочки, который просто делает что-то вроде:
run_my_main_script || sleep 10000
Поэтому, если основной скрипт выполнен успешно, немедленно выйдите, в противном случае держите окно открытым в течение 10000 секунд. Вам даже не нужно помещать этот сценарий-оболочку в отдельный файл, вы можете просто поместить его в ярлык в качестве аргумента для параметра Bash -c
(не забудьте заключить его в двойные кавычки).
person
David Grayson
schedule
23.11.2017
msys2_shell.cmd -mingw64 -c "help |more"
- person KonstantinL   schedule 22.11.2017/bin/env
и заменяете/bin/env
абсолютным путем в стиле Windows к той же программе. Запуск mintty, вероятно, не позволит вам получить вывод. - person David Grayson   schedule 23.11.2017