Como posso usar um shell semelhante ao Bash no Windows?

53

Eu uso Linux e Mac, e ensinarei algumas coisas da linha de comando em breve.

O que posso instalar no Windows para fornecer uma janela de terminal mais semelhante a um shell básico do Mac / Linux Bash?

Gostaria de poder definir .bash_aliases também, se possível.

Michael Durrant
fonte
3
costumávamos puttynos conectar a um servidor linux real. no Windows, eu sempre relutava e tentava usar cygwin, relutante por causa da minha experiência desajeitada de instalação. Mas, pessoalmente, achei mais conveniente usar do que msys e mais rápido que um vm. uma vez instalado, o cygwin se torna portátil, basta copiar o diretório, basta criar um novo nome de usuário em cada máquina / usuário com base no nome de usuário do Windows (por padrão, pelo menos). Mas lembre-se de que, como o cygwin / msys pode ser visto como uma "distribuição" personalizada, algumas opções de comando [opcional] podem estar ausentes. testá-los.
N611x007
5
A Microsoft acaba de anunciar que a próxima atualização do Windows 10 incluirá o Bash.
Dmitri Nesteruk

Respostas:

42

Você pode instalar o Cygwin ou MSYS / MinGW ou instalar uma distribuição completa do Linux em uma máquina virtual (por exemplo, usando o VirtualBox ).

faffaffaff
fonte
Usei um cygwin de 135 mb (25 mb compactado), copiado de outro computador (portátil). ele criou um novo nome de usuário com base no novo usuário atual dos computadores e funcionou perfeitamente de outra forma. meu cygwin atual é de 800 mb, com um ambiente de compilação, código fonte de 200-300 mb e algumas coisas.
N611x007
2
Nota: agora você pode instalar o "Subsistema Windows para Linux", que permite executar o shell e as ferramentas nativas do Linux no Windows. Veja a resposta abaixo ...
MrHinsh - Martin Hinshelwood 4/16
48

Agora você pode instalar o Windows Subsystem para Linux, que permite executar o shell e as ferramentas nativas do Linux no Windows . Isso permite que você execute o Bash shell diretamente no Windows e é baseado no Ubuntu.

Isso foi introduzido no Windows 10 com a Atualização de Aniversário (2016) e não está ativado por padrão. Para habilitar o novo recurso em uma máquina Windows 10 Anniversary Update, faça o seguinte:

  1. Navegue para Configurações -> Atualização e segurança -> Para desenvolvedores e selecione "Modo desenvolvedor"
  2. Painel de controle -> Programas e Recursos e clique em "Ativar ou desativar os Recursos do Windows" no painel superior esquerdo
  3. Na caixa de diálogo, selecione "Windows Subsystem for Linux" e clique em OK
  4. Reinicie a máquina
  5. Procure por "bash" e clique nele, ele deve abrir um prompt de comando e perguntar se você deseja instalar o "Ubuntu no Windows", continue com "y"
  6. Após a instalação, ele solicitará a criação de um nome de usuário e senha do UNIX
  7. Agora você está pronto para usar o shell bash

Um pouco de história, em 2015, o projeto Astoria foi iniciado para trazer aplicativos Android para o Windows e eles criaram um subsistema Linux chamado Windows Subsystem for Linux (WSL) para esse fim. Eventualmente, o projeto Astoria foi descartado por prejudicar sua estratégia de UWP (Universal Windows Platform), mas algumas partes foram mantidas e formam a base do bash para Windows. Durante o curso, a Microsoft colaborou com a Canonical (criadores do Ubuntu Linux) para fornecer a eles uma imagem nativa com todas as ferramentas / binários suportados.

Mais informações disponíveis aqui,
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)

Nemo
fonte
Eu gosto mais desta resposta!
Pedro
11
@ Peter Obrigado, tentei brevemente ontem, foi capaz de ativar o gcc / g ++, conseguiu fazer o Firefox funcionar através do xserver (bem lento, talvez eles limitem o uso da CPU?), O Chrome e o navegador padrão estavam travando e alguns comandos como 'screen' não funcionou, as coisas devem ser resolvidas na próxima atualização do bash, pois ainda está na versão beta. Dito isto, apenas ter o bash disponível nativamente no Windows é fantástico! Abre muitas possibilidades. Parabéns Microsoft!
Nemo
Você também pode executar isso no Powershell (executar como administrador): Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"E instalar qualquer um dos seguintes
itens
18

Aqui está uma lista das opções disponíveis a partir de 2018-05 com algumas atualizações sobre a WSL durante 2019-01, juntamente com um pouco de detalhes sobre cada uma.

Opções que se destacam

Cygwin e Babun

Cygwin fornece o seguinte:

  1. um shell bash e o terminal Mintty,
  2. uma ampla variedade de utilitários comuns do Linux compilados para serem executados no Windows
  3. uma abrangente camada de compatibilidade que permite que os programas Linux sejam executados no Windows.

O Cygwin visa facilitar a portabilidade de aplicativos Linux no Windows. Se algum programa C foi projetado para Unix e espera usar recursos como pipes, acesso a arquivos e diretórios no estilo Unix etc., você pode compilá-lo para o Cygwin e o Cygwin atuará como uma camada de compatibilidade entre o código e o SO estrangeiro (Windows) . Isso permite que o mesmo programa C funcione no Linux e no Windows com pouca ou nenhuma modificação. Uma enorme lista de programas Linux foi cumprida e pode ser executada quando você instala o Cygwin. No entanto, você, usuário desses programas, provavelmente precisará estar familiarizado com o Unix. Por exemplo, você pode precisar passar argumentos como em /cygdrive/c/autoexec.batvez de c:\autoexec.bate estar pronto para lidar com a saída com terminação de linha Unix ( \n) em vez de terminação de linha do Windows ( \r\n).

A coleção de todos os programas Cygwin inclui um repositório e, embora o Cygwin não possua um gerenciador de pacotes Linux tradicional, você pode adicionar, remover e atualizar programas desse repositório a qualquer momento, de uma maneira muito contra-intuitiva (você executa o setup.exe do Cygwin em a qualquer momento após a instalação)

Babun é Cygwin com um gerenciador de pacotes completo (pacto), oh-my-zsh, por seu shell, git, atualizações automáticas e uma arquitetura orientada a plug-ins. Embora o shell padrão seja zsh, você pode facilmente mudar para o bash. Parece uma boa atualização do Cygwin de baunilha, se você não se importa com o peso extra.

Mingw-w64

Mingw-w64 fornece o seguinte:

  1. uma concha,
  2. uma quantidade razoável de utilitários Linux,
  3. uma cadeia de ferramentas de desenvolvimento de SW para criar aplicativos que serão executados sem uma camada de compatibilidade do Linux (ou com uma camada mínima).

O MinGW é principalmente uma distribuição de software e uma plataforma de construção para Windows. Em particular, é uma porta do Windows das ferramentas do compilador GNU, como GCC, make, bash e assim por diante. Inclui uma quantidade razoável de ferramentas GNU e uma camada mínima de compatibilidade com Unix.

A principal diferença entre o Mingw-w64 e o Cygwin está nas prioridades: O Cygwin visa fornecer uma camada de compatibilidade POSIX completa, incluindo uma implementação completa de todas as principais chamadas e bibliotecas do sistema Unix; o desempenho é secundário à compatibilidade. O MinGW visa o desempenho, portanto, não fornecerá certas APIs POSIX que não podem ser implementadas com facilidade e / ou rapidez suficiente no Windows. Também o principal objetivo do MinGW são os desenvolvedores de S / W. No entanto, usuários casuais também podem desfrutar de seu shell e os utilitários incluídos de uso geral.

MSYS2 e Git para Windows

O MSYS2 fornece o seguinte:

  1. um shell bash e o terminal Mintty,
  2. uma quantidade razoável de utilitários Linux,
  3. um gerenciador de pacotes de linha de comando com todos os recursos para instalar programas do SO
  4. partes do Cygwin e MinGW para oferecer suporte à criação de aplicativos com ou sem uma camada abrangente de compatibilidade do Linux.
  5. um repositório de software e um gerenciador de pacotes (pacman) que facilita a instalação, o uso, a compilação e a portabilidade de software no Windows.

O MSYS2 também é principalmente uma distribuição de software e uma plataforma de construção para Windows como o MinGW, mas combina o modo do Cygwin e o modo do MinGW. Você pode usar o MSYS2 para criar "programas MinGW" ou "programas MSYS2" . O link posterior para a camada de compatibilidade do MSYS2 (msys-2.dll), que segue de perto o desenvolvimento da camada de compatibilidade do Cygwin com algumas adições / modificações . Os repositórios dos 2 projetos não são completamente relacionados. Portanto, embora o MSYS2 e o Cygwin forneçam, grep.exeeles podem ter uma versão completamente diferente.

O Git para Windows é apenas o MSYS2 com o git instalado ou, pelo menos, fortemente baseado no MSYS2 . Ele fornece o mesmo shell (bash), terminal (Mintty) e gerenciador de pacotes (pacman). Parece ser a maneira mais popular de executar o Git dominante no Windows e, junto com ele, você obtém um ambiente Unix agradável.

Subsistema Windows para Linux (WSL)

A WSL resolve o mesmo problema usando um método completamente diferente. Você executa exatamente o mesmo código que executaria em um sistema Linux na WSL, que intercepta as chamadas do kernel e as converte em chamadas do kernel do Windows (é o oposto do Wine). Claro que a tradução não pode ser perfeita, mas a Microsoft retirou o aviso beta . Como a WSL não estava disponível no Windows Server antes de 2018, não analisei muito isso. De qualquer forma, você obtém um bom shell bash com a maioria das vantagens de CLI que você esperaria encontrar em uma instalação padrão do Ubuntu. A Microsoft afirma oficialmente que "o WSL não tem como objetivo oferecer suporte a desktops ou aplicativos da GUI"no entanto, existem instruções não oficiais sobre como fazê-lo. Parece que, no momento (no início de 2018), as principais desvantagens do WSL são as seguintes: a) tornar a tela e o acesso ao disco muito lentos b) você não deve editar arquivos WSL (Linux) no Windows c) só roda em Windows de 64 bits. Aqui está uma comparação antiga, mas agradável, com o cygwin (observe que Rich Turner é membro da equipe da WSL e ele publicou muitas informações úteis sobre a WSL)

Terreno comum

Exceto pela WSL, a maioria das ferramentas acima compartilham muita tecnologia comum (bibliotecas, executáveis, conceitos). Por exemplo, o shell bash que acompanha o MinGW depende do msys-2.dll, que é um fork do cygwin.dll. Então, sim, há muito espaço para confusão :-)

Mais opções

O Cmder fornece apenas um bom terminal e um shell semelhante ao bash para Windows. Seu principal componente é o Conemu (o terminal). Além disso, ele adiciona o Clink, que fornece edição de linha de comando no estilo Bash , um layout de prompt personalizado e o esquema de cores Monokai. É altamente (ou talvez totalmente) compatível com os programas de console nativos do Windows.

O Scoop fornece um gerenciador de pacotes de linha de comando para muitos programas conhecidos entre plataformas, incluindo muitas ferramentas GNU. Ele baixa pacotes pré-compilados. Ele não fornece um shell nem um terminal, mas é executado no cmd.exe do Windows (com todas as suas limitações, mas também com sua total compatibilidade com os programas de console nativos do Windows). Ele também não inclui suíte de compiladores (mas é claro que compiladores e ferramentas de desenvolvimento são pacotes típicos que você pode instalar com o scoop). Muitos dos programas que o Scoop instala vêm diretamente do projeto MinGW / MSYS ou foram criados usando suas ferramentas.

Ainda mais opções

As soluções abaixo não parecem ativas e eu nunca as testei, mas parecem fazer o trabalho para outras pessoas:

Gow (Gnu On Windows) é a alternativa mais leve ao Cygwin sem casca. Ele usa um instalador conveniente do Windows que instala cerca de 130 aplicativos Linux de código aberto extremamente úteis, compilados como binários nativos do win32 e disponíveis no cmd.exe do windows. Ele foi projetado para ser o menor possível (cerca de 10 MB).

UnxUtils & GnuWin32 : O UnxUtils é uma coleção de portas de utilitários comuns do tipo GNU Unix para o Win32 nativo, com executáveis ​​apenas dependendo do tempo de execução do Microsoft msvcrt.dll. Você deve baixar a parte principal e algumas atualizações . O GnuWin32 possui versões posteriores ao UnxUtils, mas requer arquivos de suporte (por exemplo, DLLs)

MSYS e MinGW parecem ter sido obsoletos pelo MSYS2 e MinGW-W64, por isso nunca os olhei.

Alguns problemas comuns no Cygwin e MSYS2

Em relação ao terminal

Mintty é o terminal usado no Cygwin, MSYS2 e seus derivados. É preciso estar ciente de que, se você estiver executando programas de console nativos do Windows, não será um substituto indolor para o prompt de comando do Windows. Enquanto os programas com saída de texto simples geralmente funcionam bem, os interativos e em tela cheia geralmente apresentam problemas. Leia mais na página inicial do Mintty e também leia a entrada "Alguns programas de console nativos não funcionam quando executados no Git Bash" nas Perguntas frequentes do Git for Windows . Essa entrada tem essas recomendações a serem feitas quando você enfrentar esse tipo de problema:

Existem vários métodos para solucionar esses problemas:

  • Execute programas com problemas ao usar o utilitário winpty . Isso permite que você continue usando o terminal mintty mais agradável, mas pode se tornar pesado se você precisar da solução alternativa para muitos programas.
  • [use cmd.exe] e configure-o para "Edição rápida", tamanho razoável e retorno de retorno e fonte unicode adequada. Você ainda precisará conviver com as outras peculiaridades do [cmd.exe].
  • Instale e use o Conemu .

Outros problemas

As duas coisas mais importantes a serem lembradas são:

  1. existe uma troca entre poder e problemas difíceis de depurar. Quanto mais poderosa a solução, mais coisas podem dar errado, mesmo de maneiras que inicialmente parecerão não relacionadas à sua camada Linux.

  2. se você não possui muita experiência em Linux, não use as soluções mais poderosas como Cygwin / MSYS2 / MinGW

UnxUtils e GnuWin32 têm menos energia, mas também o menor potencial de causar dores de cabeça. Cygwin e similares superarão a fasquia em termos de energia e dores de cabeça. Cmder está em algum lugar no meio. Portanto, quando você precisar das soluções mais poderosas, durma bem e esteja totalmente concentrado. Evite usar soluções poderosas ao testar algo novo e possivelmente instável. Também não esqueça que soluções de média complexidade como o cmder não são impecáveis.

A questão dos comandos do Linux que sombream os do Windows é uma causa comum de problemas difíceis de depurar em soluções como Cygwin / MSYS2 / MinGW. Aqui está um exemplo: Eu tinha um arquivo .bat que estava usando o comando timeout. Quando executado no Cygwin, ele falha porque o tempo limite também é um comando do Linux, mas com sintaxe diferente. Depois de descobrir o problema, descobri que podia adicionar um PATH = ... na parte superior do arquivo .bat para garantir que o comando do Windows tivesse prioridade. Mas, então, recebi um erro ainda mais enigmático "O redirecionamento de entrada não é suportado" e resolvi uma solução alternativa antes de encontrar o motivo.

Aqui está um exemplo de um problema com o cmder. Eu estava executando a versão do Windows do uníssono no Cmder e, sob algumas condições especiais, ele estava travando com absolutamente nenhuma mensagem de erro . O mesmo comando estava sempre executando perfeitamente no cmd.exe. O engraçado é que ele também estava funcionando perfeitamente no Cygwin (na verdade, se você tiver nomes de arquivos Unicode, um terminal Cygwin é melhor que o cmd.exe porque o cmd.exe geralmente exibe o texto Unicode malformado).

Sobre este guia

Durante 2017-05, fiquei cansado de não entender as diferenças das ferramentas acima, embora estivesse usando algumas delas há muito tempo (principalmente CygWin e cmder, mas nunca para fins de desenvolvimento). Então, passei algumas horas para curtir a paisagem. Este guia é o resultado das anotações que guardei. Não sou especialista em campo, mas tentei encontrar todas as informações relevantes, ler com um olhar crítico e apresentar as partes mais importantes com clareza. Comente se algo parece errado e eu farei o meu melhor para corrigi-lo.

Finalmente, um pedido de desculpas por alguns problemas de terminologia: neste texto, às vezes, uso o termo Linux no lugar do UNIX ou POSIX. Eu sei que eles não são os mesmos, mas é muito difícil diferenciar entre eles ao abordar um tópico a uma distância tão longa. Mesmo quando não é difícil, leva tempo que eu não tenho ;-)

ndemou
fonte
2
Esta é uma resposta excelente, obrigado por compartilhar suas descobertas e experiência.
Daniel Sokolowski
Resposta abrangente, mas é pacman, nãopackman
Adrian Günter
Como isso pode não ser a resposta aceita? Obrigado por detalhar tudo isso.
42.
10

Eu sugiro que você baixe e instale um conjunto mínimo de MinGW e também um conjunto mínimo de MSYS. O instalador do MinGW oferece uma interface gráfica fácil para você escolher quais pacotes você deseja instalar. Se tudo o que você quer é BASH, a instalação não levará mais do que alguns megabytes.

UPDATE: Mudei para o MSYS2, que é muito mais avançado e possui porta da ferramenta pacL do ArchLinux para gerenciamento de pacotes. O instalador do MSYS2 tem tudo o que você precisa, além de usar o mintty, que é absolutamente perfeito.

DejanLekic
fonte
10

Também há Clink disponível no GitHub . Ele se integra ao prompt de comando do Windows usando bibliotecas de gancho.

Na descrição do projeto:

O Clink combina o shell nativo do Windows cmd.exe com os poderosos recursos de edição de linha de comando da biblioteca GNU Readline, que fornecem recursos avançados de conclusão, histórico e edição de linha.

(portanto, ele não fornece recursos do bash como linguagem de programação ou quaisquer outros brindes do Unix)

Eu uso o Linux no trabalho e às vezes me vejo navegando no cmd, que não age como eu esperava do Bash. Com o Clink, posso superar algumas dessas deficiências.

Ultimamente, eu também descobri um projeto promissor, mas ainda não 'posso fazer tudo', chamado flinux, que emula as funções do sistema Linux e fornece algum tipo de sistema em cima dele (atualmente baseado no Arch Linux)

Andreas
fonte
O Clink realmente altera o idioma ou apenas melhora algo no cmd.exe? Isso não está totalmente claro na resposta.
Sarge Borsch
Ele permite que você use algumas das características shell * nix usuais, tais como busca reversa usando Ctrl + R, a conclusão do comando PATH busca etc.
Andreas
Portanto, não é uma implementação do bash, certo?
Sarge Borsch
Erm, não. Uma extensão para cmd.exe, assim como descrito no site;)
Andreas
7

Além do que o faffaffaff disse , o Git for Windows inclui o Bash e alguns programas comuns de linha de comando do Linux (por exemplo , Vim , sed e gawk ). É baseado no MSYS . A versão dos programas é antiga, por exemplo, o Bash é a versão 3.1. Cygwin teria versões mais recentes dos utilitários.

Também uso o ConEmu como emulador de terminal (principalmente para realçar a sintaxe no Vim, nas guias e facilitar a cópia e colagem). O console2 também é outro emulador de terminal popular, embora eu não tenha tentado.

apostar
fonte
BTW: O ConEmu também reconhece instalações MSYS2 e permite alguma integração do Clink.
Andreas
2

Esta é uma das primeiras coisas que faço quando configuro uma nova máquina Windows:

Um console funcional e elegante no Windows

u84six
fonte
3
Certifique-se de adicionar um trecho do link para evitar os efeitos da podridão do link.
oldmud0
1

Eu apenas tentei com Babun , que integrou o Cygwin internamente, e me parece bom :)

O arquivo de download é um pouco grande, cerca de 250 MB. Mas a instalação é direta; não há necessidade de configurar nada e simplesmente funciona!

força interior
fonte
Babun inclui cygwin inteiro, é realmente incrivelmente grande. O processo de instalação é um pouco hacky (atualmente o arquivo zip é bloqueado pelo chrome como um arquivo perigoso). Mas até agora a melhor substituição de terminal que encontrei.
Tombart
Babun foi muito lento para mim. I passou a usar conemu e shell git
wordsforthewise