PowerShell не может сам выполнять .sh
сценарии, поэтому он использует системную оболочку графического интерфейса (так называемая оболочка Windows ), чтобы сообщать, как открывать такие файлы.
ВашПохоже, что система настроена на открытие (выполнение) таких файлов с помощью Git Bash , версии Bash, которая поставляется с установкой Git в Windows .
Однакобыть нет разницы между вызовом ./myscript.sh
или Start-Process ./myscript.sh
: оба должны асинхронно запустить скрипт с Bash в новом окне , а именно в окне консоли MINGW64.
Обратите внимание, что единственный способ запустить такие скрипты - это отдельное окно, потому что Bash, который поставляется с Git, не может работать в обычных консольных окнах.
Как правило, любой файл, расширение которого не указано в $env:PATHEXT
как непосредственно исполняемый файл будет запускаться в новом (возможно, графическом) окне.
Оболочка Bash, вызванная путем выполнения сценария , автоматически завершает после завершения выполнения сценария, что также закрывает окно, в котором она выполняется.
Чтобы предотвратить автоматическое закрытие окна, вы можете следить за выполнением скрипта командой, которая ожидает нажатия клавиши;Например:
& $env:ProgramFiles\Git\git-bash.exe -c './myscript.sh; read -n 1 -p \"Press a key to exit.\"'
Это все равно приводит к асинхронному выполнению;чтобы получить синхронное выполнение, т. е. чтобы дождаться закрытия окна Bash, вы должны объединить вышеприведенное с Start-Process -Wait
:
Start-Process -Wait $env:ProgramFiles\Git\git-bash.exe -Args '-c', './myscript.sh; read -n 1 -p \"Press a key to exit.\"'