Как запустить .sh в командной строке Windows?


133

Как запустить .sh в командной строке Windows 7? Я всегда получаю эту ошибку, когда пытаюсь запустить в ней эту строку,

app/build/build.sh

ошибка,

'app' is not recognized...

или,

bash app/build/build.sh

ошибка,

'bash' is not recognized...

Есть идеи, что я пропустил?

Вот скриншот, введите описание изображения здесь


6
вам нужен cygwin (возможно). Вы пытаетесь запустить сценарии SHELL (.sh) в Windows, и это единственный способ, которым я запускал свои .shфайлы в Windows.
ha9u63ar

Ответы:


55

Сообщение об ошибке указывает, что вы не установили bashили его нет в вашем PATH.

Самый популярный продукт Google - http://win-bash.sourceforge.net/, но вам также необходимо понимать, что большинство сценариев Bash ожидают Unix-подобную среду; поэтому простая установка Bash вряд ли позволит вам запустить сценарий, который вы нашли в сети, если только он не был специально разработан для этого конкретного сценария использования. Обычное решение - https://www.cygwin.com/, но есть много возможных альтернатив, в зависимости от того, чего именно вы хотите достичь.

Если Windows не занимает центральное место в вашем сценарии использования, установка бесплатной ОС (возможно, виртуализированной) может быть самым простым способом продвижения вперед.

Второе сообщение об ошибке связано с тем, что Windows номинально принимает косую черту в качестве разделителя каталогов, но в этом контексте она интерпретируется как разделитель переключателя. Другими словами, Windows анализирует вашу командную строку как app /build /build.sh(или, если перефразировать соглашения о параметрах Unix, app --build --build.sh). Вы можете попробовать, app\build\build.shно это вряд ли сработает из-за обстоятельств, изложенных выше.


1
Конечно, с Windows 10 вы можете включить WSL и иметь почти настоящий компьютер внутри вашей Windows.
Tripleee

148

Установите GIT . Во время установки GIT добавьте GIT Bash в контекстное меню Windows, выбрав соответствующий параметр. После установки щелкните правой кнопкой мыши в папке, выберите GIT Bash Here(см. Прикрепленный рисунок) и используйте команду sh, например:

sh test.sh

введите описание изображения здесь


1
У меня это не работает. Окно командной строки открывается и быстро закрывается.
desbest

28
Если у вас установлен GIT, вы можете добавить к системной переменной PATH путь к файлу sh.exe. В моем случае это было: c:\Program Files\Git\bin. Тогда запускаем sh .\script.shиз PowerShell
elshev

1
Для меня это работает как шарм в Windows 10 в 2020 году! Хотя команда копирования / вставки не работает для меня, поскольку она установлена ​​на ctrl-insиshift-ins
Nam G VU

51

Самый распространенный способ запустить файл .sh - использовать команду sh :

C:\>sh my-script-test.sh 

другой хороший вариант - установка CygWin

в находится в:Windowshome

C:\cygwin64\home\[user]

например, я выполняю свой my-script-test.shфайл с помощью команды bash как:

jorgesys@INT024P ~$ bash /home/[user]/my-script-test.sh 

44
Если вы не приняли специальных мер для его получения, у вас не будет shкоманды в Windows.
user2357112 поддерживает Монику

1
Хорошо -1, Вы имеете в виду, что мне нужно добавить учебник, чтобы получить доступ к sh из командной строки ???
Jorgesys

42
Ваш ответ представлен так, как будто вы ожидаете, что сможете ввести shпроизвольную командную строку Windows и заставить ее работать.
user2357112 поддерживает Монику

msys2 - хорошее место для получения команды sh. Проверьте github.com/userzimmermann/MSYS2-cmd, если вы хотите использовать его с cmd
Aralox

3
Bash и shкоманда устанавливаются с Git4Windows, если вы выбираете вариант установки «Установить Bash».
Джоэл Эллис

13

вы также можете использовать cmder

Cmder - это программный пакет, созданный из чистого разочарования по поводу отсутствия хороших эмуляторов консоли в Windows. Он основан на потрясающем программном обеспечении, приправлен цветовой схемой Monokai и настраиваемым макетом подсказок, выглядя сексуально с самого начала.

Скриншот

cmder.net


1
Хотя кажется, что он поставляется с дополнительным пакетом надстроек, который включает в себя общие команды оболочки Unix, базовый пакет кажется просто заменой для cmd.
Tripleee

5

В юбилейном обновлении Windows 10 стало еще проще запускать команды оболочки в / с bash на ubuntu на windows

Я пытался установить свой регион для своего маршрутизатора x-wrt r7000 netgear, я обнаружил, что для меня сработало следующее: использование bash на ubuntu в Windows, вам нужно включить подсистему, найденную в функциях Windows, и режим разработки на

ssh admin@192.168.1.1 < /mnt/c/ccode-eu.sh

Может бежать. Но это совсем другая среда.
TamusJRoyce

4

Новая функция в Windows - запускать bash в ubuntu в Windows - доступна в сборках Windows 10 «Insiders» после конференции Build:

https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/


Круто, а как с shфайлом запустить bash? Если я попытаюсь это сделать, окно просто мигнет и исчезнет. Если я перетаскиваю файл в открытое окно bash, он говорит, что путь не найден (потому что используется другое соглашение).
m93a 05

Возможно ли в настоящее время запускать файл .sh в Windows? Я не могу сейчас попробовать, но мне это интересно.
JesusMurF

1
Я сам не пробовал, но есть руководство от Microsoft по запуску sh в Windows: docs.microsoft.com/en-us/windows/wsl/install-win10
claudiu.nicola

@ m93a В окне терминала Ubuntu bash path/to/scriptзапускает сценарий. Конечно, есть и shв Ubuntu. Если у сценария есть надлежащий шебанг и разрешения, он просто path/to/scriptзапустит его с помощью интерпретатора, указанного в шебанге.
Tripleee

4

Лично я использовал этот командный файл, но для него требуется установленный CygWin (64-разрядный, как показано). Просто свяжите тип файла .SH с этим пакетным файлом (ExecSH.BAT в моем случае), и вы можете дважды щелкнуть файл .SH, и он запустится.

@echo off
setlocal

if not exist "%~dpn1.sh" echo Script "%~dpn1.sh" not found & goto :eof

set _CYGBIN=C:\cygwin64\bin
if not exist "%_CYGBIN%" echo Couldn't find Cygwin at "%_CYGBIN%" & goto :eof

:: Resolve ___.sh to /cygdrive based *nix path and store in %_CYGSCRIPT%
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%~dpn1.sh"') do set _CYGSCRIPT=%%A
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%CD%"') do set _CYGPATH=%%A

:: Throw away temporary env vars and invoke script, passing any args that were passed to us
endlocal & %_CYGBIN%\mintty.exe -e /bin/bash -l -c 'cd %_CYGPATH%;  %_CYGSCRIPT% %*'

На основе этой оригинальной работы.


0

Я использую оболочку Windows 10 Bash, также известную как подсистема Linux, также известная как Ubuntu, в Windows 10, как описано здесь.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.