2013-06-15 11:48:25 +0000 2013-06-15 11:48:25 +0000
55
55
Advertisement

¿Cómo puedo utilizar un shell tipo Bash en Windows?

Advertisement

Yo uso Linux y un Mac, y voy a enseñar algunas cosas de línea de comandos pronto.

¿Qué puedo instalar en Windows para tener una ventana de terminal lo más parecida a un shell Bash básico de Mac/Linux?

Me gustaría poder definir .bash_aliases también si es posible.

Advertisement
Advertisement

Respuestas (8)

48
48
48
2016-03-30 19:45:06 +0000

Ahora puedes instalar el Subsistema Windows para Linux que te permite ejecutar el shell y las herramientas nativas de Linux en modo usuario en Windows. Esto le permite ejecutar Bash shell directamente en Windows y se basa en Ubuntu.

Esto se introdujo en Windows 10 con la actualización de aniversario (2016) y no está habilitado por defecto. Para habilitar la nueva función en un equipo con Windows 10 Anniversary Update, haz lo siguiente:

  1. Vaya a Configuración -> Actualización y seguridad -> Para desarrolladores y seleccione “Modo desarrollador”
  2. Panel de control -> Programas y características y haga clic en “Activar o desactivar las características de Windows” en el panel superior izquierdo
  3. En el cuadro de diálogo, marque “Subsistema de Windows para Linux” y haga clic en Aceptar
  4. Reinicie la máquina
  5. Busque “bash” y haga clic en él, debería abrir un símbolo del sistema y preguntarle si desea instalar “Ubuntu en Windows”, continúe con “y”
  6. Después de la instalación te pedirá que crees un nombre de usuario y una contraseña UNIX
  7. Un poco de historia, en 2015 se inició el proyecto Astoria para llevar las aplicaciones de Android a Windows y construyeron un subsistema Linux llamado Windows Subsystem for Linux (WSL) para el propósito. Finalmente, el proyecto Astoria fue abandonado ya que socavaba su estrategia UWP (Universal Windows Platform), pero algunas partes se mantuvieron y forman la base de bash para Windows. Con el tiempo, Microsoft colaboró con Canonical (creadores de Ubuntu Linux) para proporcionarles una imagen nativa con todas las herramientas/binarios compatibles.

Más información disponible aquí, https://blogs.msdn.microsoft.com/commandline/2016/04/06/bash-on-ubuntu-on-windows-download-now-3/ https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/ https://sec.ch9.ms/sessions/build/2016/P488.mp4 (vídeo)

42
42
42
2013-06-15 11:50:58 +0000

Puedes instalar Cygwin o MSYS/MinGW , o puedes instalar una distribución completa de Linux en una máquina virtual (por ejemplo, usando VirtualBox ).

21
Advertisement
21
21
2017-05-09 14:27:32 +0000
Advertisement

Aquí hay una lista de las opciones disponibles a partir de 2018-05 con un montón de actualizaciones con respecto a WSL a partir de 2020-01 junto con un poco de detalle con respecto a cada uno.

Opciones que destacan

* Windows Subsystem for Linux(WSL) **

WSL está cada vez más maduro (Microsoft abandonó la advertencia de beta hace tiempo) y es muy fácil de instalar por lo que en la mayoría de los casos es una muy buena (si no la mejor) opción. Resuelve el problema utilizando un método diferente al de la mayoría de las otras opciones. Se ejecuta exactamente el mismo código binario que se ejecutaría en un sistema Linux. Hasta 2020-01 WSL intercepta las llamadas al kernel y las traduce a llamadas al kernel de Windows (piensa en lo contrario de Wine). Esto cambiará ya que la actual beta de WSL ejecuta un kernel linux real en una VM ligera.

De todos modos, con WSL obtienes un buen shell con casi todas las cosas del CLI que esperarías encontrar en una instalación de Ubuntu y la opción de apt install casi todo lo disponible en los repositorios. Microsoft declara oficialmente que “WSL no pretende soportar escritorios o aplicaciones GUI” sin embargo hay instrucciones no oficiales sobre cómo hacerlo. Parece que tal y como están las cosas en este momento (2020-01) los principales inconvenientes de WSL son los siguientes:

Aquí hay una vieja pero agradable comparación con cygwin (tenga en cuenta que Rich Turner es un miembro del equipo de WSL y ha publicado mucha información útil con respecto a WSL)

Cygwin y Babun

Cygwin proporciona lo siguiente:

  1. un shell bash y el terminal Mintty,
  2. una amplia gama de utilidades comunes de Linux compiladas para ejecutarse en Windows
  3. una completa capa de compatibilidad que permite ejecutar programas de Linux en Windows.

Cygwin pretende facilitar la portación de aplicaciones Linux en Windows. Si algún programa en C fue diseñado para Unix y espera utilizar características como tuberías, acceso a archivos y directorios al estilo de Unix, etc., entonces puede compilarlo para Cygwin y éste actuará como una capa de compatibilidad entre el código y el SO extranjero (Windows). Esto permite que el mismo programa en C funcione tanto en Linux como en Windows con poca o ninguna modificación. De este modo, se ha recopilado una enorme lista de programas de Linux que pueden ejecutarse al instalar Cygwin. Sin embargo, usted, el usuario de estos programas, probablemente tendrá que estar familiarizado con Unix. Por ejemplo, puede necesitar pasar argumentos como /cygdrive/c/autoexec.bat en lugar de c:\autoexec.bat y estar preparado para tratar con la salida con terminación de línea de Unix (\n) en lugar de la terminación de línea de Windows (\r\n).

La colección de todos los programas de Cygwin conforman un repositorio y aunque Cygwin no tiene un gestor de paquetes tradicional de Linux puedes añadir, eliminar y actualizar programas de este repositorio en cualquier momento con una forma muy contraintuitiva (ejecutas el setup. exe en cualquier momento después de que la instalación se haya completado)

  • Babun ** es Cygwin con un gestor de paquetes completo (pact), oh-my-zsh para su shell, git, actualizaciones automáticas y una arquitectura orientada a los plugins. Aunque el shell por defecto es zsh, se puede cambiar fácilmente a bash. Parece una buena actualización de Cygwin vainilla si no te importa el peso extra.

Mingw-w64

Mingw-w64 proporciona lo siguiente:

  1. un shell bash,
  2. una buena cantidad de utilidades de Linux,
  3. una cadena de herramientas de desarrollo de SW para construir aplicaciones que se ejecutarán sin una capa de compatibilidad de Linux (o con una mínima).

MinGW es principalmente una distribución de software y una plataforma de construcción para Windows. En particular, es un puerto de Windows de las herramientas de compilación de GNU, como GCC, make, bash, etc. Incluye una buena cantidad de herramientas GNU y una capa mínima de compatibilidad con Unix.

La principal diferencia entre Mingw-w64 y Cygwin está en las prioridades: Cygwin tiene como objetivo proporcionar una capa de compatibilidad POSIX completa que incluya una implementación completa de todas las llamadas al sistema y bibliotecas principales de Unix; el rendimiento es secundario a la compatibilidad. MinGW tiene como objetivo el rendimiento, por lo que no proporcionará ciertas APIs POSIX que no pueden ser implementadas fácilmente y/o lo suficientemente rápido en Windows. Además, el objetivo principal de MinGW son los desarrolladores de software. Sin embargo, los usuarios casuales también pueden disfrutar de su shell y de las utilidades de propósito general incluidas.

MSYS2 y Git para Windows

MSYS2 proporciona lo siguiente:

  1. un shell bash y el terminal Mintty,
  2. una buena cantidad de utilidades Linux,
  3. un completo gestor de paquetes de línea de comandos para instalar programas del SO
  4. partes tanto de Cygwin como de MinGW para soportar la construcción de aplicaciones con o sin una capa de compatibilidad completa con Linux.
  5. un repositorio de software y un gestor de paquetes (pacman) que facilita la instalación, el uso, la construcción y la portabilidad de software en Windows.

MSYS2 también es principalmente una distribución de software y una plataforma de construcción para Windows como MinGW, pero combina tanto la forma de Cygwin como la de MinGW. Puedes usar MSYS2 para crear “programas MinGW” o “programas MSYS2”. Estos últimos se vinculan a la capa de compatibilidad de MSYS2 (msys-2.dll), que a su vez sigue de cerca el desarrollo de la capa de compatibilidad de Cygwin con algunas adiciones/modificaciones . Sin embargo, los repositorios de los dos proyectos no tienen nada que ver. Así que aunque tanto MSYS2 como Cygwin proporcionan grep.exe pueden tener una versión completamente diferente.

  • Git para Windows ** es sólo MSYS2 con git instalado o al menos fuertemente basado en MSYS2 . Proporciona el mismo shell (bash), terminal (Mintty) y gestor de paquetes (pacman). Parece ser la forma más popular de hacer funcionar el Git dominante en Windows y junto con él se obtiene un bonito entorno Unix.

Terreno común

Excepto WSL la mayoría de las herramientas anteriores comparten mucha tecnología común (bibliotecas, ejecutables, conceptos). Por ejemplo, el shell bash que viene con MinGW depende de msys-2.dll que a su vez es un fork de cygwin.dll. Así que sí, hay mucho espacio para la confusión :-)

Más opciones

  • Cmder ** proporciona un bonito terminal y un shell tipo bash para Windows. Su componente principal es * Conemu ** (la terminal). Además de eso, añade Clink que proporciona Powerful Bash-style command line editing, un diseño de prompt personalizado y el esquema de colores de Monokai. Es altamente (o quizás totalmente) compatible con los programas de consola nativos de Windows.

  • Scoop ** proporciona un gestor de paquetes de línea de comandos para muchos programas multiplataforma bien conocidos, incluyendo muchas herramientas GNU. Descarga paquetes precompilados. No proporciona ni shell ni terminal_ sino que se ejecuta bajo cmd.exe de windows (con todas sus limitaciones pero también con su total compatibilidad con los programas de consola nativos de windows). Tampoco incluye una suite de compiladores (pero por supuesto los compiladores y las herramientas de desarrollo son los típicos paquetes que se pueden instalar con scoop). Muchos de los programas que Scoop instala vienen directamente del proyecto MinGW/MSYS, o fueron construidos usando sus herramientas.

Aún más opciones

Las soluciones de abajo no parecen activas y nunca las he probado, pero parecen hacer el trabajo para otros:

  • Gow ** (Gnu On Windows) es la alternativa ligera a Cygwin sin shell. Utiliza un conveniente instalador de Windows que instala alrededor de 130 aplicaciones de código abierto de Linux extremadamente útiles compiladas como binarios nativos de win32 y disponibles a través de cmd.exe de Windows. Está diseñado para ser lo más pequeño posible (unos 10 MB).

  • UnxUtils & GnuWin32 **: UnxUtils es una colección de ports de utilidades comunes tipo GNU Unix a Win32 nativo, con ejecutables que sólo dependen del msvcrt.dll de Microsoft C-runtime. Hay que descargar la parte principal y unas cuantas actualizaciones . GnuWin32 tiene versiones posteriores a las de UnxUtils, pero requiere archivos de soporte (por ejemplo, DLLs)

MSYS & MinGW parecen haber sido obsoletos por MSYS2 & MinGW-W64 por lo que nunca los miré.

Algunos problemas comunes en Cygwin & MSYS2

Respecto al terminal

Mintty es el terminal utilizado en Cygwin, MSYS2 y sus derivados. Hay que tener en cuenta que si se ejecutan programas de consola nativos de Windows no es un sustituto indoloro del Símbolo del sistema de Windows. Mientras que los programas con salida de texto simple suelen funcionar bien, los interactivos y a pantalla completa suelen tener problemas. Lee más en la página principal de Mintty y también lee la entrada “Algunos programas de consola nativos no funcionan cuando se ejecutan desde Git Bash” en Git for Windows FAQ . Esa entrada tiene estas recomendaciones para hacer cuando te enfrentas a este tipo de problemas:

Hay varios métodos para solucionar estos problemas:

  • Ejecutar los programas que tienen problemas usando la utilidad winpty . Esto le permite seguir usando la terminal mintty, pero puede ser difícil de manejar si necesita la solución para muchos programas.
  • [use cmd.exe] y configúrelo para “Edición rápida”, tamaño razonable y desplazamiento hacia atrás y fuente unicode adecuada. Tendrás que seguir viviendo con las otras peculiaridades de [cmd.exe].
  • Instalar y utilizar Conemu .

Otras cuestiones

Las dos cosas más importantes a tener en cuenta son estas:

  1. Hay un compromiso entre la potencia y los problemas de depuración. Cuanto más potente sea la solución, más cosas pueden ir mal, incluso en formas que inicialmente no parecen estar relacionadas con su capa Linux.

  2. si no tienes mucha experiencia en Linux no uses las soluciones más potentes como Cygwin/MSYS2/MinGW

UnxUtils y GnuWin32 tienen la menor potencia pero también el menor potencial de causarte dolores de cabeza. Cygwin y otros similares son los más potentes y los que más dolores de cabeza provocan. Cmder está en algún lugar en el medio. Así que cuando necesites las soluciones más potentes duerme bien y concéntrate al máximo. Evita utilizar soluciones potentes mientras pruebas algo nuevo y posiblemente inestable. Tampoco olvides que las soluciones de mediana complejidad como cmder no son impecables.

El problema de que los comandos de Linux hagan sombra a los de Windows es una causa común de problemas difíciles de depurar en soluciones como Cygwin/MSYS2/MinGW. Aquí hay un ejemplo: Tenía un archivo .bat que utilizaba el comando timeout. Cuando se ejecutaba bajo Cygwin fallaba porque timeout es también un comando de Linux pero con una sintaxis diferente. Después de detectar el problema, descubrí que podía añadir un PATH=… al principio del archivo .bat para asegurarme de que el comando de Windows tuviera prioridad. Pero entonces obtuve un error aún más críptico “Input redirection is not supported” y me conformé con una solución antes de encontrar la razón.

He aquí un ejemplo de un problema con cmder. Estaba ejecutando la versión de Windows de unison bajo Cmder y bajo algunas condiciones especiales se colgaba con absolutamente ningún mensaje de error. El mismo comando siempre se ejecutaba perfectamente bajo cmd.exe. Lo curioso es que también se ejecutaba perfectamente bajo Cygwin (de hecho si tienes nombres de archivos Unicode es mejor un terminal Cygwin que cmd.exe porque cmd.exe suele mostrar el texto Unicode malformado).

Sobre esta guía

Durante 2017-05 me harté de no entender las diferencias de las herramientas anteriores aunque usaba algunas de ellas desde hace tiempo (principalmente CygWin y cmder pero nunca con fines de desarrollo). Así que dediqué unas cuantas horas a grokear el panorama. Esta guía es el resultado de las notas que tomé. No soy un experto en la materia pero me he esforzado en encontrar toda la información relevante, leerla con ojo crítico y presentar las partes más importantes de forma clara. Por favor, comenten si algo les parece mal y haré lo posible por corregirlo.

Por último, una disculpa por algunos problemas de terminología: En este texto a veces uso el término Linux en lugar de UNIX o POSIX. Sé que no son lo mismo, pero es muy difícil diferenciarlos cuando se aborda un tema desde tan lejos. Incluso cuando no es difícil me lleva un tiempo que no tengo ;-)

10
10
10
2013-10-30 12:46:07 +0000

Le sugiero que descargue e instale un conjunto mínimo de MinGW y también un conjunto mínimo de MSYS. El instalador de MinGW te da una GUI fácil para elegir qué paquetes quieres instalar. Si todo lo que quieres es BASH, entonces la instalación no ocupará más que unos pocos megabytes.

ACTUALIZACIÓN: Me he pasado al MSYS2 que es mucho más avanzado, y tiene el port de la herramienta pacman de ArchLinux para la gestión de paquetes. El instalador de MSYS2 tiene todo lo que necesita, además de usar mintty que es absolutamente perfecto .

10
Advertisement
10
10
2013-11-20 01:00:47 +0000
Advertisement

También hay Clink disponible en GitHub . Se integra en el prompt de comandos de Windows usando librerías hook.

De la descripción del proyecto:

Clink combina el shell nativo de Windows cmd.exe con las potentes características de edición de línea de comandos de la librería GNU Readline, que proporciona ricas capacidades de finalización, historial y edición de líneas.

(por lo que no proporciona características de bash como lenguaje de programación o cualquier otra cosa de Unix)

Utilizo Linux en el trabajo y me encuentro a veces tabulando en cmd que no actúa como espero de Bash. Con Clink puedo superar algunas de estas deficiencias.

Últimamente, también descubrí un proyecto prometedor, pero que todavía no lo puede hacer todo, llamado flinux que emula las funciones del sistema Linux y proporciona una especie de sistema encima (actualmente basado en Arch Linux)

7
7
7
2013-06-15 17:07:20 +0000

Además de lo que dijo faffaffaff , Git para Windows incluye Bash y algunos programas comunes de la línea de comandos de Linux (por ejemplo, Vim , sed , y gawk ). Está basado en MSYS . Sin embargo, la versión de los programas es antigua, por ejemplo Bash es la versión 3.1. Cygwin tendría versiones más recientes de las utilidades.

También uso ConEmu como emulador de terminal (principalmente para resaltar la sintaxis en Vim, las etiquetas, y para facilitar el copiar y pegar). console2 es también otro popular emulador de terminal aunque no lo he probado.

2
Advertisement
2
2
2015-06-16 22:50:19 +0000
Advertisement

Esta es una de las primeras cosas que hago cuando configuro una nueva máquina Windows: Una consola funcional y elegante en Windows

1
1
1
2015-06-19 15:44:31 +0000

Acabo de probar con Babun , que integra el Cygwin internamente, y me sabe bien : )

El archivo de descarga es un poco grande, alrededor de 250 MB. Pero la instalación es sencilla, no hay que configurar nada y simplemente funciona.

Advertisement

Preguntas relacionadas

3
6
10
19
10
Advertisement
Advertisement