Como executar .sh no prompt de comando do Windows?

132

Como posso executar .sh no prompt de comando do Windows 7? Eu sempre recebo esse erro quando tento executar esta linha nele,

app/build/build.sh

erro,

'app' is not recognized...

ou,

bash app/build/build.sh

erro,

'bash' is not recognized...

Alguma idéia do que eu perdi?

Aqui a tela pega, insira a descrição da imagem aqui

laukok
fonte
6
você precisa do cygwin (possivelmente). Você está tentando executar scripts SHELL (.sh) no Windows e é a única maneira de executar meus .sharquivos no Windows.
ha9u63ar

Respostas:

54

A mensagem de erro indica que você não instalou bashou não está no seu PATH.

O principal hit do Google é http://win-bash.sourceforge.net/, mas você também precisa entender que a maioria dos scripts do Bash espera um ambiente semelhante ao Unix; portanto, é improvável que apenas instalar o Bash permita a execução de um script encontrado na rede, a menos que tenha sido projetado especificamente para esse cenário de uso específico. A solução usual para isso é https://www.cygwin.com/, mas existem muitas alternativas possíveis, dependendo do que exatamente você deseja realizar.

Se o Windows não for central para o seu cenário de uso, a instalação de um sistema operacional gratuito (talvez virtualizado) pode ser o caminho mais simples.

A segunda mensagem de erro se deve ao fato de o Windows aceitar nominalmente a barra como um separador de diretório, mas, nesse contexto, está sendo interpretado como um separador de opção. Em outras palavras, o Windows analisa sua linha de comando como app /build /build.sh(ou, parafraseando as convenções de opção do Unix app --build --build.sh). Você pode tentar, app\build\build.shmas é improvável que funcione, devido às circunstâncias descritas acima.

triplo
fonte
1
Obviamente, com o Windows 10, você pode ativar o WSL e quase ter um computador real dentro do Windows.
tripleee
147

Instale o GIT . Durante a instalação do GIT, adicione GIT Bash ao menu de contexto do Windows, selecionando sua opção. Após a instalação, clique com o botão direito do mouse na pasta e selecione GIT Bash Here(veja a foto em anexo) e use o comando sh como por exemplo:

sh test.sh

insira a descrição da imagem aqui

Faisal Mq
fonte
1
Isso não funciona para mim. Uma janela do prompt de comando é aberta e fecha rapidamente.
Desbest
27
Se você tiver o GIT instalado, poderá adicionar um caminho à variável de sistema PATH sh.exe. No meu caso, foi: c:\Program Files\Git\bin. Em seguida, execute o sh .\script.shPowerShell
elshev 27/04
1
Isso funciona para mim como um encanto no Windows 10 em 2020! Embora o comando copiar / colar não funcione para mim, pois ele foi fixado em ctrl-inseshift-ins
Nam G VU
51

A maneira mais comum de executar um arquivo .sh é usando o comando sh :

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

outra boa opção é instalar o CygWin

Windowsno homesitua-se em:

C:\cygwin64\home\[user]

por exemplo, eu executo meu my-script-test.sharquivo usando o comando bash como:

jorgesys@INT024P ~$ bash /home/[user]/my-script-test.sh 
Jorgesys
fonte
43
A menos que você tenha tomado medidas especiais para obtê-lo, não terá um shcomando no Windows.
user2357112 suporta Monica
1
Ok -1, você quer dizer que eu tenho que adicionar um tutorial para ter acesso ao sh na linha de comando ???
Jorgesys 25/08/16
41
Sua resposta é apresentada como se você esperasse poder digitar shem um prompt de comando arbitrário do Windows e fazê-lo funcionar.
User2357112 suporta Monica
O msys2 é um bom lugar para obter o comando sh. Confira github.com/userzimmermann/MSYS2-cmd se você quiser usá-lo com cmd
Aralox
3
O Bash e o shcomando são instalados com o Git4Windows se você selecionar a opção de instalação 'Install Bash'.
Joel Ellis
13

você pode usar também cmder

Cmder é um pacote de software criado por pura frustração devido à ausência de bons emuladores de console no Windows. Ele é baseado em um software incrível e temperado com o esquema de cores Monokai e um layout de prompt personalizado, com uma aparência sexy desde o início

Captura de tela

cmder.net

vipmaa
fonte
1
Embora pareça vir com um pacote adicional opcional que inclui comandos comuns do shell Unix, o pacote base parece ser apenas um substituto cmd.
Tripleee
5

Na atualização de aniversário do Windows 10, é ainda mais fácil executar comandos do shell em / com bash no ubuntu no windows

Eu estava tentando definir minha região para o meu roteador netgear x-wrt r7000, achei o seguinte funcionou para mim, usando o bash no ubuntu no windows, você precisa habilitar o subsistema encontrado nos recursos do windows e o modo dev em

ssh admin@192.168.1.1 < /mnt/c/ccode-eu.sh
Assinado
fonte
Pode ser executado. Mas é um ambiente completamente diferente.
TamusJRoyce
4

Novo recurso no Windows - execute bash no ubuntu no windows - disponível no Windows 10 "Insiders" compila após a conferência Build:

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

claudiu.nicola
fonte
Legal, mas como você executa um sharquivo combash ? Se eu tentar, a janela pisca e desaparece. Se eu arrastar e soltar o arquivo em uma janela do bash aberta, ele diz que o caminho não foi encontrado (porque usa uma convenção diferente).
m93a
Hoje em dia é possível executar um arquivo .sh no Windows? Eu não posso tentar agora, mas estou interessado.
JesusMurF
1
Eu ainda não tentei, mas há um guia da Microsoft sobre como executar o sh no windows: docs.microsoft.com/en-us/windows/wsl/install-win10
claudiu.nicola
@ m93a Numa janela de terminal do Ubuntu, bash path/to/scriptexecuta o script. Certamente há tambémsh no Ubuntu. Se o script tiver um shebang e permissões adequados, simplesmente path/to/scripto executará com o rnterpreter especificado no shebang.
Tripleee
4

Pessoalmente, usei esse arquivo em lotes, mas ele requer o CygWin instalado (64 bits, como mostrado). Basta associar o tipo de arquivo .SH a esse arquivo em lotes (ExecSH.BAT no meu caso) e você pode clicar duas vezes no .SH e ele será executado.

@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% %*'

Baseado neste trabalho original.

Anonymouse
fonte
0

Eu uso o shell do Windows 10 Bash, também conhecido como Linux Subsystem, também conhecido como Ubuntu no Windows 10, conforme orientação aqui

Nam G VU
fonte