¿Cómo ejecutar .sh en el símbolo del sistema de Windows?

132

¿Cómo puedo ejecutar .sh en el símbolo del sistema de Windows 7? Siempre recibo este error cuando intento ejecutar esta línea en él,

app/build/build.sh

error,

'app' is not recognized...

o,

bash app/build/build.sh

error,

'bash' is not recognized...

¿Alguna idea de lo que me he perdido?

Aquí la captura de pantalla, ingrese la descripción de la imagen aquí

laukok
fuente
66
necesitas cygwin (posiblemente). Estás intentando ejecutar scripts SHELL (.sh) en Windows y esa es la única forma en que he ejecutado mis .sharchivos en Windows.
ha9u63ar

Respuestas:

54

El mensaje de error indica que no ha instalado bash, o no está en su PATH.

El principal éxito de Google es http://win-bash.sourceforge.net/, pero también debe comprender que la mayoría de los scripts de Bash esperan un entorno similar a Unix; por lo tanto, es poco probable que instalar Bash le permita ejecutar un script que encontró en la red, a menos que haya sido diseñado específicamente para este escenario de uso en particular. La solución habitual para eso es https://www.cygwin.com/ pero hay muchas alternativas posibles, dependiendo de qué es exactamente lo que quieres lograr.

Si Windows no es central para su escenario de uso, la instalación de un sistema operativo libre (quizás virtualizado) podría ser la forma más sencilla de avanzar.

El segundo mensaje de error se debe al hecho de que Windows acepta nominalmente la barra diagonal como un separador de directorio, pero en este contexto, se está interpretando como un separador de conmutador. En otras palabras, Windows analiza su línea de comando como app /build /build.sh(o, parafraseando con las convenciones de opciones de Unix, app --build --build.sh). Podría intentarlo, app\build\build.shpero es poco probable que funcione debido a las circunstancias descritas anteriormente.

tripleee
fuente
1
Por supuesto, con Windows 10, puede habilitar WSL y casi tener una computadora real dentro de su Windows.
tripleee
147

Instalar GIT . Durante la instalación de GIT, agregue GIT Bash al menú contextual de Windows seleccionando su opción. Después de la instalación, haga clic derecho en su carpeta, seleccione GIT Bash Here(ver foto adjunta) y use su comando sh como, por ejemplo:

sh test.sh

ingrese la descripción de la imagen aquí

Faisal Mq
fuente
1
A mi no me funciona. Se abre una ventana de símbolo del sistema y luego se cierra rápidamente.
Desbest
27
Si tiene instalado GIT, puede agregar una ruta a la variable de sistema PATH sh.exe. En mi caso fue: c:\Program Files\Git\bin. Luego ejecute sh .\script.shdesde PowerShell
elshev
1
¡Esto funciona para mí como un encanto en Windows 10 en 2020! Aunque el comando copiar / pegar no funciona para mí, ya que se fijó en ctrl-insyshift-ins
Nam G VU
51

La forma más común de ejecutar un archivo .sh es usar el comando sh :

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

otra buena opción es instalar CygWin

en Windowsel homese encuentra en:

C:\cygwin64\home\[user]

por ejemplo ejecuto mi my-script-test.sharchivo usando el comando bash como:

jorgesys@INT024P ~$ bash /home/[user]/my-script-test.sh 
Jorgesys
fuente
43
A menos que haya tomado medidas especiales para obtenerlo, no tendrá un shcomando en Windows.
user2357112 es compatible con Monica el
1
Ok -1, ¿Quieres decir que tengo que agregar un tutorial para tener acceso a sh desde la línea de comandos?
Jorgesys
41
Su respuesta se presenta como si espera poder escribir shen un símbolo del sistema arbitrario de Windows y hacer que funcione.
user2357112 es compatible con Monica el
msys2 es un buen lugar para obtener el comando sh. Visite github.com/userzimmermann/MSYS2-cmd si desea usarlo con cmd
Aralox
3
Bash y el shcomando se instalan con Git4Windows si selecciona la opción de instalación 'Instalar Bash'.
Joel Ellis
13

puedes usar también cmder

Cmder es un paquete de software creado por pura frustración por la ausencia de emuladores de consola agradables en Windows. Se basa en un software increíble y está condimentado con el esquema de color Monokai y un diseño personalizado rápido, luciendo sexy desde el principio.

Captura de pantalla

cmder.net

vipmaa
fuente
1
Aunque parece venir con un paquete de complementos opcional que incluye comandos comunes de shell de Unix, el paquete base parece ser solo un reemplazo cmd.
tripleee
5

En Windows 10 Anniversary Update, es aún más fácil ejecutar comandos de shell en / con bash en ubuntu en windows

Estaba tratando de configurar mi región para mi enrutador netgear x-wrt r7000, encontré que lo siguiente funcionó para mí, usando bash en ubuntu en windows, tienes que habilitar el subsistema que se encuentra en las características de windows y el modo dev en

ssh admin@192.168.1.1 < /mnt/c/ccode-eu.sh
FirmadoAdam
fuente
Puede correr. Pero es un entorno completamente diferente.
TamusJRoyce
4

Nueva función en Windows: ejecutar bash en ubuntu en Windows, disponible en las compilaciones "Insiders" de Windows 10 después de la conferencia Build:

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

claudiu.nicola
fuente
Genial, pero ¿cómo ejecutas un sharchivo bash? Si trato de hacerlo, la ventana parpadea y desaparece. Si arrastro y suelto el archivo en una ventana de bash abierta, dice que no se encontró la ruta (porque usa una convención diferente).
m93a
¿Es posible hoy en día ejecutar un archivo .sh en Windows? No puedo probarlo ahora pero estoy interesado.
JesusMurF
1
No lo he probado yo mismo, pero hay una guía de Microsoft sobre cómo ejecutar sh en Windows: docs.microsoft.com/en-us/windows/wsl/install-win10
claudiu.nicola
@ m93a En una ventana de terminal de Ubuntu, bash path/to/scriptejecuta el script. Ciertamente también hay shen Ubuntu. Si el script tiene un shebang y permisos adecuados, simplemente path/to/scriptlo ejecutará con el rnterpreter especificado en el shebang.
tripleee
4

Personalmente utilicé este archivo por lotes, pero requiere CygWin instalado (64 bits como se muestra). Simplemente asocie el tipo de archivo .SH con este archivo por lotes (ExecSH.BAT en mi caso) y puede hacer doble clic en .SH y se ejecuta.

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

Basado en este trabajo original.

Anonimato
fuente
0

Uso Windows 10 Bash shell, también conocido como Linux Subsystem, también conocido como Ubuntu en Windows 10, como se indica aquí

Nam G VU
fuente