Як запустити .sh в командному рядку Windows?


132

Як запустити .sh в командному рядку Windows 7? Я завжди отримую цю помилку, коли намагаюся запустити в ній цю лінію,

app/build/build.sh

помилка,

'app' is not recognized...

або,

bash app/build/build.sh

помилка,

'bash' is not recognized...

Будь-які ідеї, що я пропустив?

Тут захоплення екрана, введіть тут опис зображення


6
вам потрібен цигувін (можливо). Ви намагаєтеся запустити сценарії SHELL (.sh) в Windows, і це єдиний спосіб, коли я запускаю свої .shфайли в Windows.
ha9u63ar

Відповіді:


54

Повідомлення про помилку вказує на те, що ви не встановлені bashабо його немає у вашому PATH.

Найпопулярніший хіт Google - це http://win-bash.sourceforge.net/, але ви також повинні розуміти, що більшість сценаріїв Баша очікує середовища, схоже на 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.
трійчатка

147

Встановити GIT . Під час встановлення GIT додайте GIT Bash до контекстного меню Windows, вибравши його параметр. Після встановлення правою кнопкою миші у вашій папці виберіть GIT Bash Here(див. Додане зображення) та скористайтеся командою sh, наприклад, наприклад:

sh test.sh

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


1
Це не працює для мене. Відкриється вікно командного рядка, після чого швидко закривається.
дебют

27
Якщо у вас встановлений 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 

43
Якщо ви не вжили спеціальних заходів для його отримання, ви не збираєтесь мати shкоманду в Windows.
user2357112 підтримує Моніку

1
Добре -1, ти маєш на увазі, що я повинен додати підручник, щоб мати доступ до sh із командного рядка ???
Хорхесіс

41
Ваша відповідь подається так, ніби ви очікуєте, що зможете набрати shв довільному командному рядку Windows і змусити її працювати.
user2357112 підтримує Моніку

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

3
Bash і shкоманда встановлюються за допомогою Git4Windows, якщо ви вибрали опцію "Install Bash".
Джоел Елліс

13

Ви можете також використовувати cmder

Cmder - це програмний пакет, створений з чистої розчарування через відсутність приємних консольних емуляторів у Windows. Він заснований на дивовижному програмному забезпеченні, а також поєднаний з кольоровою гамою Monokai та спеціальною швидкою компонуванням, виглядає сексуально з самого початку.

Знімок екрана

cmder.net


1
Хоча, здається, в комплекті додається додатковий пакет, який включає загальні команди оболонки Unix, базовий пакет, здається, є лише заміною cmd.
трійка

5

У Windows 10 Anniversary Update ще простіше запускати команди оболонки в / з bash на ubuntu на Windows

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

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

Може бігати. Але це зовсім інше середовище.
TamusJRoyce

4

Нова функція в Windows - запуск bash на ubuntu на Windows - доступний в Windows 10 "Інсайдери" будує після конференції Build:

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


Класно, але як запустити shфайл bash? Якщо я спробую це зробити, вікно просто миготить і зникає. Якщо я перетягую файл у відкрите вікно bash, воно говорить, що шлях не знайдено (тому що він використовує інший конвент).
m93a

Чи можливо сьогодні запустити .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запустіть його за допомогою rnterpreter, вказаного в шебанге.
трійчатка

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 aka Linux Subystem під назвою Ubuntu в Windows 10, як тут керуються

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.