¿Cómo puedo usar un shell Bash-like en Windows?

53

Uso Linux y una Mac, y pronto enseñaré algunas cosas de la línea de comandos.

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

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

Michael Durrant
fuente
3
solíamos puttyconectarnos a un servidor Linux real. En Windows siempre fui reacio y tentado a usarlo cygwin, reacio debido a mi torpe experiencia de instalación. Pero personalmente, me pareció más conveniente de usar que msys y más rápido que un vm. una vez instalado, cygwin resulta de alguna manera portátil simplemente copiando su directorio es suficiente, sin embargo, creará un nuevo nombre de usuario en cada máquina / usuario basado en el nombre de usuario de Windows (por defecto, al menos). Pero tenga en cuenta que dado que cygwin / msys puede verse como una "distribución" personalizada, pueden faltar algunos interruptores de comando [opcionales]. pruébalos.
n611x007
55
Microsoft acaba de anunciar que la próxima actualización de Windows 10 incluirá Bash.
Dmitri Nesteruk

Respuestas:

42

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

faffaffaff
fuente
Utilicé un cygwin que tenía 135 mb (25 mb empaquetados), copiado de otra computadora (portátil). creó un nuevo nombre de usuario basado en el usuario actual de las nuevas computadoras, y funcionó perfectamente de lo contrario. mi cygwin actual es de 800 mb, con un entorno de compilación, código fuente de 200-300 mb y algunas cosas más.
n611x007
2
Nota: ahora puede instalar el "Subsistema de Windows para Linux" que le permite ejecutar shell y herramientas de Linux en modo de usuario nativo en Windows. Vea la respuesta a continuación ...
MrHinsh - Martin Hinshelwood
48

Ahora puede instalar el Subsistema de Windows para Linux que le permite ejecutar shell y herramientas de Linux en modo de usuario nativo 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 de forma predeterminada. Para habilitar la nueva función en una máquina de actualización de aniversario de Windows 10, haga 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. Reiniciar la máquina
  5. Busque "bash" y haga clic en él, se abrirá un símbolo del sistema y le preguntará si desea instalar "Ubuntu en Windows", continúe con "y"
  6. Después de la instalación, le pedirá que cree un nombre de usuario y contraseña de UNIX
  7. Ahora estás listo para usar el bash shell

Un poco de historia, en 2015, el proyecto Astoria comenzó a traer aplicaciones de Android a Windows y construyeron un subsistema de Linux llamado Windows Subsystem for Linux (WSL) con el propósito. Finalmente, el proyecto Astoria se abandonó porque socavaba su estrategia UWP (Plataforma universal de Windows), pero algunas partes se conservaron y forman la base de bash para Windows. Durante el curso, 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 (video)

Nemo
fuente
¡Me gusta más esta respuesta!
Peter
1
@ Peter Gracias, lo probé brevemente ayer, pude hacer funcionar gcc / g ++, pude hacer que Firefox funcionara a través de xserver (¿bastante lento, tal vez limitan el uso de la CPU?), Chrome y el navegador predeterminado fallaban y algunos comandos como 'screen' no funcionó, las cosas deberían solucionarse en la próxima actualización de bash, ya que todavía está en beta. Dicho esto, ¡tener bash disponible de forma nativa en Windows es fantástico! Abre muchas posibilidades. Felicitaciones a Microsoft!
Nemo
También puede ejecutar esto en Powershell (ejecutar como administrador): Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"e instalar cualquiera de los siguientes elementos de la tienda de Windows: Ubuntu, Debian, OpenSUSE, Kali Linux
Zhenhir
18

Aquí hay una lista de las opciones disponibles a partir de 2018-05 con algunas actualizaciones sobre WSL durante 2019-01 junto con un poco de detalle sobre cada una.

Opciones que destacan

Cygwin y Babun

Cygwin proporciona lo siguiente:

  1. un bash shell y la terminal Mintty,
  2. Una amplia gama de utilidades comunes de Linux compiladas para ejecutarse en Windows
  3. Una capa de compatibilidad integral que permite que los programas de Linux se ejecuten en Windows.

Cygwin tiene como objetivo facilitar la portabilidad de aplicaciones de Linux en Windows. Si algún programa C fue diseñado para Unix y espera utilizar características como tuberías, acceso a archivos y directorios al estilo de Unix, etc., puede compilarlo para Cygwin y Cygwin actuará como una capa de compatibilidad entre el código y el sistema operativo externo (Windows) . Esto permite que el mismo programa C funcione tanto en Linux como en Windows con poca o ninguna modificación. Por lo tanto, se ha cumplido una gran lista de programas de Linux y se puede ejecutar al instalar Cygwin. Sin embargo, usted, el usuario de estos programas, probablemente tendrá que estar familiarizado con Unix. Por ejemplo, es posible que deba pasar argumentos como en /cygdrive/c/autoexec.batlugar de c:\autoexec.baty estar listo para lidiar con la salida con la terminación de línea Unix ( \n) en lugar de la terminación de línea de Windows ( \r\n).

La colección de todos los programas de Cygwin comprende un repositorio y, aunque Cygwin no tiene un administrador de paquetes de Linux tradicional, puede agregar, eliminar y actualizar programas de este repositorio en cualquier momento de una manera muy intuitiva (ejecuta Cygwin's setup.exe en en cualquier momento después de que se complete la instalación)

Babun es Cygwin con un administrador de paquetes con todas las funciones (pacto), oh-my-zsh por su shell, git, actualizaciones automáticas y una arquitectura orientada a complementos. Aunque el shell predeterminado es zsh, puede cambiar fácilmente a bash. Parece una buena actualización de Vanilla Cygwin si no te importa el peso extra.

Mingw-w64

Mingw-w64 proporciona lo siguiente:

  1. un bash shell
  2. una buena cantidad de utilidades de Linux,
  3. una cadena de herramientas de desarrollo SW para crear aplicaciones que se ejecutarán sin una capa de compatibilidad de Linux (o con una capa 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 del compilador 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 comprenda una implementación completa de todas las principales llamadas y bibliotecas del sistema Unix; El rendimiento es secundario a la compatibilidad. MinGW tiene como objetivo el rendimiento, por lo que no proporcionará ciertas API POSIX que no se pueden implementar fácilmente y / o lo suficientemente rápido en Windows. También el objetivo principal de MinGW son los desarrolladores S / W. Sin embargo, los usuarios ocasionales también pueden disfrutar de su shell y el propósito general incluye utilidades.

MSYS2 y Git para Windows

MSYS2 proporciona lo siguiente:

  1. un bash shell y la terminal Mintty,
  2. una buena cantidad de utilidades de Linux,
  3. un administrador de paquetes de línea de comandos con todas las funciones para instalar programas del sistema operativo
  4. partes de Cygwin y MinGW para admitir la creación de aplicaciones con o sin una capa de compatibilidad completa con Linux.
  5. un repositorio de software y un administrador de paquetes (pacman) que facilita la instalación, el uso, la compilación y la transferencia 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 forma de MinGW. Puede usar MSYS2 para crear "programas MinGW" o "programas MSYS2" . El enlace posterior a la capa de compatibilidad de MSYS2 (msys-2.dll) que sigue de cerca el desarrollo de la capa de compatibilidad de Cygwin con algunas adiciones / modificaciones . Sin embargo, los repositorios de los 2 proyectos no tienen relación alguna. Entonces, aunque tanto MSYS2 como Cygwin proporcionan grep.exe, pueden tener una versión completamente diferente.

Git para Windows es solo MSYS2 con git instalado o, al menos, se basa en gran medida en MSYS2 . Proporciona el mismo shell (bash), terminal (Mintty) y administrador de paquetes (pacman). Parece ser la forma más popular de ejecutar el Git dominante en Windows y, junto con él, obtienes un agradable entorno Unix.

Subsistema de Windows para Linux (WSL)

WSL resuelve el mismo problema usando un método completamente diferente. Ejecutas exactamente el mismo código que ejecutarías en un sistema Linux en WSL que intercepta las llamadas del kernel y las traduce a las llamadas del kernel de Windows (es lo contrario de Wine). Por supuesto, la traducción no puede ser perfecta, pero Microsoft eliminó la advertencia beta . Debido a que WSL no estaba disponible en Windows Server antes de 2018, no lo he investigado demasiado. De todos modos, obtienes un buen bash shell con la mayoría de los artículos de CLI que esperarías encontrar en una instalación de Ubuntu. Microsoft declara oficialmente que "WSL no tiene como objetivo admitir aplicaciones o escritorios GUI"Sin embargo, hay instrucciones no oficiales sobre cómo hacerlo. Parece que, tal como están las cosas en este momento (principios de 2018), los principales inconvenientes de WSL son los siguientes: a) renderizar la pantalla y el acceso al disco son muy lentos b) no se supone que edite archivos WSL (Linux) desde Windows c) solo se ejecuta en Windows de 64 bits. Aquí hay una comparación antigua pero agradable con cygwin (tenga en cuenta que Rich Turner es miembro del equipo de WSL y ha publicado mucha información útil sobre WSL)

Terreno común

Excepto por 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 es una bifurcación de cygwin.dll. Entonces sí, hay mucho espacio para la confusión :-)

Mas opciones

Cmder proporciona simplemente un terminal agradable y una fiesta similar a la cáscara para Windows. Su componente principal es Conemu (la terminal). Además de eso, agrega Clink, que proporcionauna edición de línea de comandos de estilo Powerful Bash , un diseño de solicitud personalizado y el esquema de color Monokai. Es altamente (o quizás totalmente) compatible con los programas de consola nativos de Windows.

Scoop proporciona un administrador de paquetes de línea de comandos para muchos programas multiplataforma bien conocidos, incluidas muchas herramientas GNU. Descarga paquetes precompilados. No proporciona ni un shell ni un terminal, sino que se ejecuta en cmd.exe de Windows (con todas sus limitaciones, pero también con su compatibilidad total con los programas de consola nativos de Windows). Tampoco incluye un conjunto de compiladores (pero, por supuesto, los compiladores y las herramientas de desarrollo son paquetes típicos que puede instalar con scoop). Muchos de los programas que instala Scoop provienen directamente del proyecto MinGW / MSYS o se crearon utilizando sus herramientas.

Aún más opciones

Las soluciones a continuación no parecen activas y nunca las probé, pero parecen hacer el trabajo para otros:

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

UnxUtils y GnuWin32 : UnxUtils es una colección de puertos de utilidades comunes similares a GNU Unix para Win32 nativo, con ejecutables que solo dependen de Microsoft C-runtime msvcrt.dll. Debe descargar la parte principal y algunas actualizaciones . GnuWin32 tiene versiones posteriores que UnxUtils, pero requiere archivos de soporte (por ejemplo, DLL)

MSYS y MinGW parecen haber quedado obsoletos por MSYS2 y MinGW-W64, así que nunca los miré.

Algunos problemas comunes en Cygwin y MSYS2

En cuanto a la terminal

Mintty es el terminal utilizado en Cygwin, MSYS2 y sus derivados. Debe tener en cuenta que si está ejecutando programas de consola nativos de Windows, no es un reemplazo sencillo para el símbolo del sistema de Windows. Si bien los programas con salida de texto simple generalmente funcionan bien, los interactivos y de pantalla completa a menudo tienen problemas. Lea más en la página de inicio de Mintty y también lea la entrada "Algunos programas de consola nativos no funcionan cuando se ejecutan desde Git Bash" en las preguntas frecuentes de Git para Windows . Esa entrada tiene estas recomendaciones para hacer frente a este tipo de problemas:

Existen varios métodos para solucionar estos problemas:

  • Ejecute programas que tengan problemas con la utilidad winpty . Esto le permite seguir usando la terminal mintty más bonita, pero puede volverse 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. Aún tendrá que vivir con las otras peculiaridades de [cmd.exe].
  • Instalar y usar Conemu .

Otros asuntos

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

  1. Hay un intercambio de poder y problemas difíciles de depurar. Cuanto más poderosa sea la solución, más cosas pueden salir mal, incluso en formas que inicialmente parecerán no estar relacionadas con su capa de Linux.

  2. Si no tiene mucha experiencia en Linux, no use las soluciones más potentes como Cygwin / MSYS2 / MinGW

UnxUtils y GnuWin32 tienen la menor potencia pero también el menor potencial de causar dolores de cabeza. Cygwin y similares encabezarán el listón tanto en potencia como en dolores de cabeza. Cmder está en algún lugar en el medio. Entonces, cuando necesite las soluciones más potentes, duerma bien y concéntrese completamente. Evite usar soluciones potentes mientras prueba algo nuevo y posiblemente inestable. Además, no olvide que las soluciones de complejidad media como cmder no están impecables.

El problema de los comandos de Linux que siguen 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 estaba usando el comando timeout. Cuando se ejecuta bajo Cygwin, fallará porque el tiempo de espera también es un comando de Linux pero con una sintaxis diferente. Después de detectar el problema, descubrí que podía agregar una RUTA = ... en la parte superior del archivo .bat para asegurarme de que el comando de Windows tuviera prioridad. Pero entonces llegué una aún más críptico "redirección de entrada no es compatible" error y se conformó con una solución antes de encontrar la razón.

Aquí hay un ejemplo de un problema con cmder. Estaba ejecutando la versión de Windows de Unison en Cmder y, en algunas condiciones especiales, estaba colgando sin ningún mensaje de error . El mismo comando siempre se ejecutaba perfectamente en cmd.exe. Lo curioso es que también se estaba ejecutando perfectamente en Cygwin (de hecho, si tiene nombres de archivo Unicode, un terminal Cygwin es mejor que cmd.exe porque cmd.exe a menudo muestra texto Unicode con formato incorrecto).

Acerca de esta guía

Durante 2017-05 me cansé de no entender las diferencias de las herramientas anteriores, aunque las estaba usando desde hace mucho tiempo (principalmente CygWin y cmder, pero nunca con fines de desarrollo). Así que pasé unas horas para ver el paisaje. Esta guía es el resultado de las notas que guardé. No soy un experto en el campo, pero he tratado de encontrar toda la información relevante, leerla con ojo crítico y presentar claramente las partes más importantes. Comente si algo parece estar mal y haré todo lo posible para corregirlo.

Finalmente, 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 al abordar un tema desde una distancia tan larga. Incluso cuando no es difícil, lleva tiempo que no tengo ;-)

ndemou
fuente
2
Esta es una excelente respuesta, gracias por compartir sus hallazgos y experiencia.
Daniel Sokolowski
Respuesta completa, pero es pacman, nopackman
Adrian Günter
¿Cómo podría no ser esta la respuesta aceptada? Gracias por detallar todo esto.
42.
10

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 le brinda una GUI fácil para elegir qué paquetes desea instalar. Si todo lo que quieres es BASH, entonces la instalación no tomará más de unos pocos megabytes.

ACTUALIZACIÓN: Me mudé a MSYS2, que es mucho más avanzado y tiene el puerto de la herramienta ArchLinux pacman para la administración de paquetes. El instalador MSYS2 tiene todo lo que necesita, además de usar mintty, que es absolutamente perfecto.

DejanLekic
fuente
10

También hay Clink disponible en GitHub . Se integra a sí mismo en el símbolo del sistema de Windows utilizando las bibliotecas de enlace.

De la descripción del proyecto:

Clink combina el shell nativo de Windows cmd.exe con las potentes funciones de edición de línea de comandos de la biblioteca GNU Readline, que proporciona una completa finalización, historial y capacidades de edición de línea.

(por lo que no proporciona funciones de lenguaje bash como lenguaje de programación ni ninguna otra característica de Unix)

Uso Linux en el trabajo y a veces me encuentro tanteando en cmd, lo que no funciona como lo esperaba de Bash. Con Clink puedo superar algunas de estas deficiencias.

Últimamente, también descubrí un proyecto prometedor, pero que todavía no se puede hacer, llamado flinux, que emula las funciones del sistema Linux y proporciona algún tipo de sistema (actualmente basado en Arch Linux)

Andreas
fuente
¿Clink realmente cambia el idioma o solo mejora algo en cmd.exe? Esto no está del todo claro en la respuesta.
Sarge Borsch
Le permite utilizar algunas de las funciones habituales de * nix shell, como la búsqueda inversa usando Ctrl + R, la finalización de un comando de búsqueda de RUTA, etc.
Andreas
Entonces no es una implementación bash, ¿verdad?
Sarge Borsch
Erm, no Una extensión de cmd.exe, tal como se describe en el sitio;)
Andreas
7

Además de lo que dijo faffaffaff , Git para Windows incluye Bash y algunos programas comunes de 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, páginas de pestañas y copiar y pegar más fácilmente). console2 también es otro emulador de terminal popular, aunque no lo he probado.

doblar
fuente
Por cierto: ConEmu también reconoce las instalaciones de MSYS2 y permite cierta integración de Clink.
Andreas
2

Esta es una de las primeras cosas que hago cuando configuro una nueva máquina con Windows:

Una consola funcional y elegante en Windows

u84six
fuente
3
Asegúrese de agregar un extracto del enlace para evitar los efectos de la pudrición del enlace.
oldmud0
1

Acabo de probar con Babun , que integró 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 necesidad de configurar nada y simplemente funciona!

poder interno
fuente
Babun incluye cygwin completo, es realmente increíblemente enorme. El proceso de instalación es un poco hacky (actualmente el archivo zip está bloqueado por Chrome como un archivo peligroso). Pero hasta ahora el mejor reemplazo de terminal que he encontrado.
Tombart
Babun fue muy lento para mí. Me cambié a usar conemu y git shell
palabras para el