¿Hay alguna forma de ejecutar scripts Bash en Windows? [cerrado]

100

Compré y utilizo Windows 7 Ultimate, y me gusta usarlo para desarrollar aplicaciones. Una de las desventajas (como con todos los sistemas operativos) es que no puedo ejecutar scripts Bash. ¿Hay alguna forma de ejecutar scripts Bash en Windows instalando algún software? Está bien si no funciona al 100%, pero siempre que la funcionalidad más común esté disponible, debería ser excelente.

Torre
fuente
3
@Rajish Ya no ...
msanford
1
@msanford, esto no tiene sentido. ¿Por qué se permite que este hilo viva mientras se cierra su duplicado?
Pacerier
@Pacerier El duplicado fue eliminado, casi con certeza por su autor, ya que las modificaciones tienden a no eliminar preguntas. Probablemente a eso se refería mi comentario. No sé por qué el autor lo borró. También fue hace 4 años.
msanford

Respuestas:

80

Instale Cygwin , que incluye Bash entre muchas otras utilidades GNU y Unix (sin las cuales es poco probable que bash sea muy útil de todos modos).

Otra opción es MSYS de MinGW que incluye bash y un conjunto más pequeño de las utilidades más importantes como awk. Personalmente, hubiera preferido Cygwin porque incluye herramientas de trabajo tan pesadas como Perl y Python, sin las cuales no puedo vivir, mientras que MSYS escatima en ellas y asume que las instalará usted mismo.

Actualizado : si alguien está interesado en esta respuesta y está ejecutando MS-Windows 10, tenga en cuenta que MS-Windows 10 tiene una función de " Subsistema de Windows para Linux " que, una vez habilitada, le permite instalar una imagen de modo de usuario de Ubuntu y luego ejecuta Bash en eso. Esto proporciona un 100% de compatibilidad con Ubuntu para depurar y ejecutar scripts Bash, pero esta configuración es completamente independiente de Windows y no puede usar scripts Bash para interactuar con las funciones de Windows (como procesos y API) excepto por el acceso limitado a archivos a través de la función DrvFS. .

Guss
fuente
2
Consulte la documentación del Subsistema de Windows para Linux (WSL) para obtener más información.
stomy
1
WSL quedó obsoleto para Windows 10 S ahora ... :(
Javier García Manzano
2
No está en desuso, es solo una de las características que no obtiene si compra la edición más barata de Windows " S mall". Tampoco está disponible en la Home Edition, IIRC.
Guss
Git le permite ejecutar archivos por lotes fácilmente desde cualquier lugar de Windows youtube.com/watch?v=7keNZT9579k
Muhammad Faizan Khan
@MuhammadFaizanKhan - El puerto de Git a Windows, así como algunas otras aplicaciones "orientadas a la línea de comandos" (Github Desktop como un ejemplo notable) también vienen con un puerto de Windows de Bash. Estos, más a menudo que no, son puertos MinGW (es decir, compilados utilizando MinGW y MSYS para compatibilidad con Posix). Específicamente, si observa su instalación de Git para Windows, verá el mingw32directorio que contiene básicamente MSYS. Entonces, Git para Windows es MinGW que incluye Git (es opcional en el instalador de MSYS) con un instalador "más agradable": superuser.com/a/1362301/10942
Guss
30

La mejor opción que pude encontrar es Git Windows. Simplemente instálelo y luego haga clic derecho y haga clic en "Git Bash Here". Esto abrirá una ventana de bash.ingrese la descripción de la imagen aquí

Esto abrirá una ventana de bash como esta: ingrese la descripción de la imagen aquí

y los comandos de linux funcionan ...

He probado los comandos 'sh', 'vi', 'ssh', 'curl', etc.

Garvit Jain
fuente
ESTO - es tan simple ¿no?
Kalpesh Soni
sí, muy útil
Garvit Jain
4
También puede instalar MinGW sin la hinchazón adicional de Git si todo lo que desea es su caparazón.
Stefan Z Camilleri
Puedes ver este tutorial de un minuto aquí youtube.com/watch?v=7keNZT9579k
Muhammad Faizan Khan
25

Si busca algo un poco más nativo, puede usar getGnuWin32 para instalar todas las herramientas de línea de comandos de Unix que se han adaptado. Eso más winBash le brinda la mayor parte de un entorno Unix funcional. ¡Agregue console2 para un mejor emulador de terminal y casi no podrá saberlo en Windows!

Cygwin es un conjunto de herramientas mejor en general, pero me he encontrado con problemas inesperados debido a la división entre él y Windows. Sin embargo, ninguna de estas soluciones es tan buena como un sistema Linux nativo.

Es posible que desee considerar el uso de virtualbox para crear una máquina virtual Linux con la distribución que elija. Configúrelo para compartir una carpeta con el sistema operativo host, y puede usar un verdadero entorno de desarrollo de Linux y compartir con Windows. Solo ten cuidado con esos marcadores de EOL, te atrapan todo el tiempo.

Spencer Rathbun
fuente
O CoLinux
Guss
colinux no funciona en 64 bits (todavía)
hexículo
¿Alguien sabe de un sucesor del proyecto win-bash? Ya no se desarrolla activamente y se atasca en bash v 1.14 (bash adecuado, a partir de esta publicación, es v 4.4)
Bjartr
@Bjartr La gente de Microsoft ha agregado una función para permitir que una versión nativa de bash se ejecute en Windows 7
Spencer Rathbun
@SpencerRathbun Eso solo se ejecutará en Windows 10, yo estoy en Windows 7. Tampoco estoy seguro de cómo funciona mezclando ejecutables y rutas de Linux y Windows, por lo que puede que no sea mejor (desde mi perspectiva) que cygwin bash .
Bjartr
11

¿Mejor opción? Soporte para Windows 10. Native Bash!

Paul0515
fuente
2
No, no son las mejores opciones. Simplemente ejecute Linux de esa manera, no bash IN Windows; no puede iniciar ejecutables de Windows desde ese bash (a menos que lo solucione con cbwin... pero eso ya es demasiado alboroto para una solución alternativa).
ankostis
La opción 'mejor' es probablemente una cuestión de gustos. Entonces, tal vez tengas razón. Sin embargo, me permite ejecutar cualquier (bueno ... la mayoría) de los scripts bash en mi PC con Windows.
Paul0515
1
Puede ejecutar todos los scripts de bash virtuales, siempre que no intenten interactuar con el sistema operativo host (Windows). WSL bash es un subsistema de virtualización liviano que puede ejecutar los binarios ELF originales (es decir, Ubuntu), ¡pero no puede escapar de él!
ankostis
10

Siempre puede instalar Cygwin para ejecutar un shell de Unix en Windows. Usé Cygwin extensamente con Windows XP.

Michael Shopsin
fuente
¿Qué paquete necesito instalar para ejecutar UNIX Shell en Cygwin?
Torre
@rFactor la página Cygwin incluye un instalador de Windows con todos los componentes necesarios.
Spencer Rathbun
El sitio Cygwin explica qué se ha portado y cómo instalarlo. Si todo lo que desea es un shell, la instalación básica de Cygwin debería ser suficiente.
Michael Shops el
9

Después de instalar git-extensions ( https://code.google.com/p/gitextensions/ ), puede ejecutar el archivo .sh desde el símbolo del sistema. (No se requiere ./script.sh, simplemente ejecútelo como un archivo bat / cmd) O puede ejecutarlos en un entorno bash "completo" utilizando el shell bash MinGW Git.

No soy un gran fan de Cygwin (sí, estoy seguro de que es realmente poderoso), por lo que ejecutar scripts bash en Windows sin tener que instalarlo es perfecto para mí.

Simon Featherstone
fuente
1
No sé qué es git-extensions, pero su descripción dice que es una interfaz gráfica de usuario para git. ¿Cómo ejecutarías los scripts de shell desde esta herramienta? ¿Quizás te refieres a ejecutarlos con msys bash que incluye?
Variable Miserable
Solo para confirmar: git-extensions incluye una copia de bash y lo establece en la ruta. Lo intenté bashdesde una instancia de PowerShell, fallé, instalé git-extensions y lo intenté y funcionó para mí.
rtpHarry
4

Para ejecutar de forma nativa, es probable que necesite usar Cygwin (sin el cual no puedo vivir cuando uso Windows). Así que desde el principio, +1 para Cygwin. Cualquier otra cosa sería poco civilizado.

SIN EMBARGO, dicho esto, recientemente comencé a usar una combinación de utilidades para PORT Bash fácilmente scripts a Windows para que mis compañeros de trabajo anti-Linux puedan ejecutar fácilmente tareas complejas que son mejor manejadas por las utilidades GNU.

Normalmente puedo portar un script Bash a Batch en muy poco tiempo abriendo el script original en un panel y escribiendo un archivo Batch en el otro panel. Las herramientas que utilizo son las siguientes:

Prefiero UnxUtils a GnuWin32 debido al hecho de que [alguien, por favor, corríjame si me equivoco] las utilidades de GnuWin normalmente tienen que estar instaladas, mientras que UnxUtils son binarios independientes que simplemente funcionan de inmediato.

Sin embargo, los CoreUtils no incluyen algunas utilidades conocidas * NIX como cURL, que también está disponible para Windows (curl.haxx.se/download.html).

Creo una carpeta para los proyectos y siempre SET PATH =. en el archivo .bat para que no se haga referencia a otros comandos que no sean los comandos básicos del shell CMD (así como los UnxUtils particulares requeridos en la carpeta del proyecto para que el script Batch funcione como se esperaba).

Luego, copio los archivos .exe necesarios de CoreUtils en la carpeta del proyecto y los hago referencia en el archivo .bat como ". \ Curl.exe -s google.com", etc.

El programa Bat2Exe es donde ocurre la magia. Una vez que su archivo Batch esté completo y se haya probado con éxito, inicie Bat2Exe.exe y especifique la ruta a la carpeta del proyecto. Bat2Exe luego creará un binario de Windows que contiene todos los archivos en esa carpeta específica, y usará el primer .bat que encuentre para usar como el ejecutable principal. Incluso puede incluir un archivo .ico para utilizarlo como icono del archivo .exe final que se genera.

He probado algunos de estos tipos de programas, y muchos de los binarios generados se marcan como malware, pero la versión de Bat2Exe a la que hice referencia funciona perfectamente y los archivos .exe generados se escanean completamente.

El ejecutable resultante se puede ejecutar de forma interactiva haciendo doble clic, o desde la línea de comandos con parámetros, etc., como un archivo Batch normal, excepto que podrá utilizar la funcionalidad de muchas de las herramientas que normalmente utilizará. en Bash.

Me doy cuenta de que esto se está haciendo bastante largo, pero si puedo divagar un poco, también escribí un script de Batch al que llamo PortaBashy que mis compañeros de trabajo pueden iniciar desde un recurso compartido de red que contiene una instalación portátil de Cygwin. Luego establece la variable% PATH% en el formato * NIX normal (/ usr / bin: / usr / sbin: / bin: / sbin), etc. y puede lanzarse en el propio shell Bash o lanzar el más poderoso y bonito emulador de terminal MinTTY.

Siempre hay numerosas formas de lograr lo que está tratando de hacer; es solo una cuestión de combinar las herramientas adecuadas para el trabajo, y muchas veces se reduce a preferencias personales.

rubynorails
fuente
1

Hay una posibilidad teórica más para hacerlo: las versiones profesionales de Windows tienen soporte POSIX incorporado, por lo que bash podría haberse compilado para Windows de forma nativa.

Lástima, pero todavía no he encontrado uno compilado ...

enredaderas
fuente
3
El sybsystem POSIX en Windows ha sido abandonado [1]. Siendo reemplazado por el "Subsistema de Windows para Linux" que se basa en el sistema de virtualización ligero "Puente levadizo" para ejecutar Ubuntu-bash sin modificaciones. Pero hay algunos matices, por ejemplo, una vez dentro de este sistema, ¡ya no puede llamar a ejecutables de Windows! [1] blogs.msdn.microsoft.com/wsl/2016/04/22/…
ankostis
@ankostis, en realidad, con CU puedes ...
Paul0515