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

Como posso usar uma concha tipo Bash- no Windows?

Eu uso Linux e um Mac, e em breve estarei a ensinar algumas coisas de linha de comando.

O que posso instalar no Windows para me dar uma janela de terminal mais semelhante a uma shell básica do Mac/Linux Bash?

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

Respostas (8)

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

Pode agora instalar o Subsistema Windows para Linux* que lhe permite gerir shell e ferramentas Linux em modo de utilizador nativo no Windows. Isto permite-lhe executar *Bash** shell directamente no Windows e é baseado no Ubuntu.

Isto foi introduzido no Windows 10 com a Actualização do Aniversário (2016) e não está activado por defeito. Para activar a nova funcionalidade numa máquina de Actualização do Aniversário do Windows 10, faça o seguinte:

  1. navegue para Configurações -\ > Actualização e Segurança -\ > Para Desenvolvedores e seleccione “Modo Desenvolvedor”
  2. Painel de controlo -> Programas e características e clique em “Ligar ou desligar características do Windows” no painel superior esquerdo
  3. Na caixa de diálogo, marcar “Windows Subsystem for Linux” e clicar em Ok
  4. Reinicie a máquina
  5. Procure por “bash” e clique nele, deverá abrir um prompt de comando e perguntar-lhe se deseja instalar “Ubuntu no Windows”, continuar com “y”
  6. Após a instalação, pedirá para criar um nome de utilizador e senha UNIX
  7. Está agora pronto para usar a shell bash

Um pouco de história, em 2015 o projecto Astoria foi iniciado para trazer aplicações Android para Windows e construíram um subsistema Linux chamado Windows Subsystem for Linux (WSL) para o efeito. Eventualmente o projecto Astoria foi abandonado, pois minou a sua estratégia UWP (Plataforma Universal Windows), mas algumas partes foram retidas e formam a base da bash para Windows. Ao longo do curso, a Microsoft colaborou com a Canonical (criadores do Ubuntu Linux) para lhes fornecer uma imagem nativa com todas as ferramentas/binários suportados.

Mais informação disponível 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)

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

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

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

Aqui está uma lista das opções disponíveis a partir de 2018-05 com muitas actualizações relativas à WSL a partir de 2020-01, juntamente com um pouco de detalhe sobre cada uma delas.

Opções que se destacam

* Subsistema Windows para Linux(WSL) **

WSL está a tornar-se cada vez mais maduro (a Microsoft abandonou o aviso beta há muito tempo) e é muito fácil de instalar, por isso na maioria dos casos é uma opção muito boa (se não a melhor). Resolve o problema usando um método diferente do que a maioria das outras opções. Executa-se exactamente o mesmo código binário que se executaria num sistema Linux. Até 2020-01 a WSL intercepta as chamadas do kernel e traduze-as para chamadas do kernel do windows (pense no oposto de Wine). Isto irá mudar desde que o actual beta da WSL corre um verdadeiro kernel de linux numa VM leve.

De qualquer modo, com WSL obtém-se uma boa concha com quase todos os produtos CLI que se espera encontrar numa instalação Ubuntu em stock e a opção de apt install quase tudo o que está disponível nos repositórios. A Microsoft declara oficialmente que “WSL não tem como objectivo suportar desktops ou aplicações GUI” contudo existem instruções não oficiais sobre como o fazer. Parece que na situação actual (2020-01), os principais inconvenientes da WSL são os seguintes:

Aqui está uma comparação antiga mas agradável com cygwin (note que Rich Turner é um membro da equipa WSL e publicou muitas informações úteis sobre WSL)

Cygwin e Babun

Cygwin fornece o seguinte:

  1. uma shell bash e o terminal Mintty,
  2. uma extensa gama de utilitários comuns do Linux compilados para correr em Windows
  3. uma camada de compatibilidade abrangente que permite que os programas Linux corram em Windows.

Cygwin visa facilitar a portabilidade de aplicações Linux em Windows. Se algum programa em C foi concebido para Unix e espera utilizar características tais como pipes, ficheiro estilo Unix e acesso a directórios e.t.c. então pode compilá-lo para Cygwin e Cygwin actuará como camada de compatibilidade entre o código e o foreign OS (Windows). Isto permite que o mesmo programa C funcione tanto em Linux como em Windows com pouca ou nenhuma modificação. Uma enorme lista de programas Linux foi assim cumprida e pode ser executada quando se instala o Cygwin. Contudo, você, o utilizador destes programas, terá provavelmente de estar familiarizado com Unix. Por exemplo, poderá precisar de passar argumentos como /cygdrive/c/autoexec.bat em vez de c:\autoexec.bat e estar pronto para lidar com a saída com a terminação de linha Unix (\n) em vez da terminação de linha Windows (\r\n).

A colecção de todos os programas Cygwin compreende um repositório e embora o Cygwin não tenha um gestor de pacotes Linux tradicional, pode adicionar, remover e actualizar programas deste repositório em qualquer altura de uma forma muito contra-intuitiva (executa-se a configuração do Cygwin. exe em qualquer altura após a instalação ter terminado)

  • Babun *** é Cygwin com um gestor de pacotes completo (pact), oh-my-zsh para a sua shell, git, actualizações automáticas e uma arquitectura orientada para plug-in. Embora a shell padrão seja zsh, pode facilmente mudar para bash. Parece ser uma boa actualização do baunilha Cygwin se não se importar com o peso extra.

Mingw-w64

Mingw-w64 fornece o seguinte:

  1. uma shell bash,
  2. uma quantidade razoável de utilitários Linux,
  3. uma cadeia de ferramentas de desenvolvimento SW para construir aplicações que funcionarão sem uma camada de compatibilidade Linux (ou com uma camada mínima).

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

A principal diferença entre Mingw-w64 e Cygwin está nas prioridades: Cygwin visa fornecer uma camada completa de compatibilidade POSIX, compreendendo uma implementação completa de todas as principais chamadas e bibliotecas de sistemas Unix; o desempenho é secundário em relação à compatibilidade. O MinGW visa o desempenho, pelo que não fornecerá certos APIs POSIX que não possam ser implementados com facilidade e/ou rapidez suficiente sob Windows. Também os principais alvos do MinGW são os programadores S/W. No entanto, os utilizadores ocasionais podem também desfrutar da sua concha e o objectivo geral inclui utilitários.

MSYS2 e Git for Windows

MSYS2 fornece o seguinte:

  1. uma shell bash e o terminal Mintty,
  2. uma quantidade razoável de utilitários Linux,
  3. um gestor de pacotes de linha de comando completo para instalar programas de SO
  4. partes tanto do Cygwin como do MinGW para suportar aplicações de construção, com ou sem uma camada de compatibilidade abrangente do Linux.
  5. um repositório de software e um gestor de pacotes (pacman) que facilita a instalação, utilização, compilação e porte de software em Windows.

MSYS2 é também principalmente uma distribuição de software e uma plataforma de construção para Windows como MinGW, mas combina tanto o caminho do Cygwin como o caminho do MinGW. Pode usar MSYS2 para criar “programas MinGW” ou “programas MSYS2”. O último link para a camada de compatibilidade do MSYS2 (msys-2.dll) que por si só segue de perto o desenvolvimento da camada de compatibilidade da Cygwin com algumas adições/modificações . Os repositórios dos 2 projectos não estão, no entanto, completamente relacionados. Assim, embora tanto o MSYS2 como o Cygwin forneçam grep.exe eles podem ter uma versão completamente diferente.

  • Git para Windows ** ou é apenas MSYS2 com git instalado ou pelo menos fortemente baseado em MSYS2 . Fornece o mesmo shell (bash), terminal (Mintty) e gestor de pacotes (pacman). Parece ser a forma mais popular de pôr o Git dominante a correr no Windows e junto com ele obtém-se um ambiente Unix agradável.

Terra comum

Excepto da WSL, a maioria das ferramentas acima referidas partilham muita tecnologia comum (bibliotecas, executáveis, conceitos). Por exemplo, a shell bash que vem com MinGW depende da msys-2.dll que por sua vez é um garfo de cygwin.dll. Portanto, sim, há muito espaço para confusão :-)

Mais opções

  • Cmder *** fornece apenas um bom terminal e uma shell tipo bash para Windows. O seu componente principal é * Conemu *** (o terminal). Além disso, adiciona Clink que fornece Powerful Bash-style edição de linha de comando, um layout de prompt personalizado e o esquema de cores Monokai. É altamente (ou talvez totalmente) compatível com programas de consola nativos do Windows.

  • Scoop ** fornece um gestor de pacotes de linha de comando para muitos programas de plataforma cruzada bem conhecidos, incluindo muitas ferramentas GNU. Descarrega pacotes pré-compilados. Não fornece nem shell nem terminal mas corre sob o cmd.exe do windows (com todas as suas limitações mas também com a sua total compatibilidade com programas de consola nativos do windows). Também não inclui nenhum pacote compilador (mas é claro que compiladores e ferramentas de desenvolvimento são pacotes típicos que pode instalar com o scoop). Muitos dos programas que o Scoop instala provêm directamente do projecto MinGW/MSYS, ou foram construídos utilizando as suas ferramentas.

Ainda mais opções

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

  • Gow ** (Gnu On Windows) é a alternativa mais leve ao Cygwin sem concha. Utiliza um conveniente instalador do Windows que instala cerca de 130 aplicações Linux de código aberto extremamente úteis compiladas como binários nativos win32 e disponíveis através do cmd.exe do windows. Foi concebido para ser tão pequeno quanto possível (cerca de 10 MB).

  • UnxUtils & GnuWin32 **: UnxUtils é uma colecção de portas de utilitários comuns do tipo GNU Unix para Win32 nativo, com executáveis apenas dependendo da msvcrt.dll do Microsoft C-runtime. Deve descarregar a parte principal e algumas actualizações . GnuWin32 tem versões posteriores à UnxUtils, mas requer ficheiros de suporte (ex. DLLs)

MSYS* & MinGW* parecem ter sido obsoleto por MSYS2 & MinGW-W64, por isso nunca olhei para eles.

Algumas questões comuns sobre Cygwin & MSYS2

Relativamente ao terminal

Mintty é o terminal utilizado em Cygwin, MSYS2 e os seus derivados. Deve-se estar ciente de que se estiver a executar programas de consola nativa do Windows não é um substituto indolor para o Windows Command Prompt. Enquanto os programas com saída de texto simples normalmente funcionam bem, os interactivos e de ecrã inteiro têm frequentemente problemas. Leia mais na página inicial do Mintty e também leia a entrada “Alguns programas de consola nativa não funcionam quando executados a partir de Git Bash” em Git for Windows FAQ . Essa entrada tem estas recomendações a fazer quando enfrenta este tipo de problemas:

Existem vários métodos para contornar estes problemas:

& > - Executar programas que têm problemas usando o utilitário winpty . Isto permite-lhe continuar a usar o terminal mintty mais agradável, mas pode tornar-se complicado se precisar de uma solução para muitos programas. - [use cmd.exe] e configure-o para “Edição Rápida”, tamanho razoável e scroll-back e fonte unicode adequada. Ainda terá de viver com as outras peculiaridades de [cmd.exe]. - Instalar e usar Conemu .

Outras questões

As duas coisas mais importantes a ter em mente são estas:

  1. há uma troca entre o poder e as questões difíceis de depurar. Quanto mais poderosa for a solução, mais coisas podem correr mal mesmo de formas que inicialmente parecerão não relacionadas com a sua camada Linux.

  2. se não tiver muita experiência com Linux não utilize as soluções mais poderosas como Cygwin/MSYS2/MinGW

UnxUtils e GnuWin32 têm o menor poder mas também o menor potencial de lhe causar dores de cabeça. O Cygwin e similares irão superar a barra tanto em potência como em dores de cabeça. Cmder está algures no meio. Por isso quando precisar das soluções mais poderosas, durma bem e esteja totalmente concentrado. Evite utilizar soluções poderosas enquanto testa algo novo e possivelmente instável. Também não se esqueça que soluções de complexidade média como a cmder não são imaculadas.

A questão dos comandos de janelas de sombra do Linux é uma causa comum de problemas difíceis de depurar em soluções como Cygwin/MSYS2/MinGW. Aqui está um exemplo: Eu tinha um ficheiro .bat que estava a usar o comando timeout. Quando executado sob Cygwin, falharia porque o timeout é também um comando Linux, mas com sintaxe diferente. Depois de detectar o problema, descobri que podia adicionar um PATH=… no topo do ficheiro .bat para ter a certeza de que o comando windows tinha prioridade. Mas depois obtive um ainda mais enigmático “O redireccionamento de entrada não é suportado” erro e resolvi dar uma volta de trabalho antes de encontrar a razão.

Aqui está um exemplo de um problema com o cmder. Estava a correr a versão de unison do Windows em Cmder e sob algumas condições especiais estava pendurado com absolutamente sem mensagem de erro. O mesmo comando estava sempre a correr na perfeição em cmd.exe. O engraçado é que também estava a correr perfeitamente sob Cygwin (de facto, se tiver nomes de ficheiro Unicode um terminal Cygwin é melhor do que cmd.exe porque cmd.exe exibe frequentemente texto Unicode malformado).

Sobre este guia

Durante 2017-05 fartei-me de não compreender as diferenças das ferramentas acima mencionadas, embora tenha utilizado algumas delas desde há muito tempo (principalmente CygWin e cmder, mas nunca para fins de desenvolvimento). Por isso, passei algumas horas a tatear a paisagem. Este guia é o resultado das notas que guardei. Não sou especialista na matéria, mas esforcei-me muito para encontrar toda a informação relevante, li-a com um olhar crítico e apresentar claramente as partes mais importantes. Por favor, comente se algo parecer errado e farei o meu melhor para o corrigir.

Finalmente um pedido de desculpas por algumas questões terminológicas: Neste texto utilizo por vezes o termo Linux no lugar de UNIX ou POSIX. Sei que não são a mesma coisa, mas é muito difícil diferenciá-los ao abordar um tema de tão longa distância. Mesmo quando não é difícil, leva tempo que eu não tenho ;-)

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

Sugiro que descarregue e instale um conjunto minimal de MinGW e também um conjunto mínimo de MSYS. O instalador MinGW dá-lhe uma GUI fácil de escolher que pacotes pretende instalar. Se tudo o que deseja é BASH, então a instalação não levará mais do que poucos megabytes.

UPDATE: mudei para o MSYS2 que é muito mais avançado, e tem o porte da ferramenta pacman do ArchLinux para gestão de pacotes. O instalador do MSYS2 tem tudo o que precisa, além de utilizar mintty que é absolutamente perfeito .

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

Há também Clink disponível em GitHub . Integra-se no prompt de comando do windows usando bibliotecas de ganchos.

A partir da descrição do projecto:

Clink combina a shell nativa do Windows cmd.exe com os poderosos recursos de edição de linha de comando da biblioteca GNU Readline, que fornece uma rica capacidade de conclusão, história, e edição de linha.

(por isso não fornece características de bash-como uma linguagem de programação ou qualquer outro bem Unix)

Eu uso Linux no trabalho e dou por vezes por mim próprio a fazer tabulações em cmd que não actua como se eu esperasse do Bash. Com Clink posso superar algumas destas deficiências.

Ultimamente, descobri também um projecto promissor, mas ainda não ‘can-do-all’ chamado flinux que emula as funções do sistema Linux e fornece algum tipo de sistema em cima dele (actualmente baseado no Arch Linux)

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

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

I também usam ConEmu como emulador de terminal (principalmente para realce de sintaxe em Vim, páginas de separadores, e colagem mais fácil de copiar). consola2 é também outro emulador de terminal popular embora eu ainda não o tenha experimentado.

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

Esta é uma das primeiras coisas que faço quando instalo uma nova máquina Windows: Uma consola funcional e elegante em Windows

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

Acabei de experimentar com Babun , que integrou o Cygwin internamente, e sabe bem para mim : )

O ficheiro de download ligeiramente grande, cerca de 250 MB. Mas a instalação é simples; não há necessidade de configurar nada e apenas funciona!