web-dev-qa-db-fra.com

Comment utiliser un shell de type Bash sous Windows?

J'utilise Linux et un Mac et j'enseignerai bientôt des choses en ligne de commande.

Que puis-je installer sous Windows pour obtenir une fenêtre de terminal très semblable à un shell Bash Mac/Linux de base?

J'aimerais pouvoir définir .bash_aliases aussi bien que possible.

51
Michael Durrant

Vous pouvez installer Cygwin ou MSYS/MinGW , ou vous pouvez installer une distribution Linux complète sur une machine virtuelle (par exemple, en utilisant VirtualBox ).

41
faffaffaff

Vous pouvez maintenant installer le sous-système Windows pour Linux , ce qui vous permet deexécuter Linux Shell en mode utilisateur natif et des outils sous Windows. Cela vous permet d’exécuter Bash Shell directement sous Windows et est basé sur Ubuntu.

Ceci a été introduit dans Windows 10 avec la mise à jour d'anniversaire (2016) et n'est pas activé par défaut. Pour activer la nouvelle fonctionnalité sur un ordinateur Windows 10 Anniversary Update, procédez comme suit:

  1. Accédez à Paramètres -> Mise à jour et sécurité -> Pour les développeurs et sélectionnez "Mode développeur".
  2. Panneau de configuration -> Programmes et fonctionnalités et cliquez sur "Activer ou désactiver les fonctionnalités Windows" dans le volet supérieur gauche
  3. Dans la boîte de dialogue, cochez "Windows Subsystem for Linux" et cliquez sur OK.
  4. Redémarrer la machine
  5. Recherchez "bash" et cliquez dessus, il devrait ouvrir une invite de commande et vous demander si vous souhaitez installer "Ubuntu sous Windows", continuez avec "y"
  6. Après l'installation, il vous sera demandé de créer un nom d'utilisateur et un mot de passe UNIX.
  7. Vous êtes maintenant prêt à utiliser le shell bash

Un peu d’histoire, en 2015, le projet Astoria a commencé à intégrer des applications Android à Windows et a créé un sous-système Linux appelé Windows Subsystem for Linux (WSL). Finalement, le projet Astoria a été abandonné car il sapait sa stratégie UWP (Universal Windows Platform), mais certaines parties ont été conservées et constituent la base de bash pour Windows. Au cours du cours, Microsoft a collaboré avec Canonical (créateurs d’Ubuntu Linux) pour leur fournir une image native avec tous les outils/fichiers binaires pris en charge.

Plus d'informations disponibles ici,
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 (vidéo)

48
Nemo

Voici une liste des options disponibles à compter de 2018-05 avec quelques mises à jour concernant WSL au cours de 2019-01 ainsi qu'un peu de détail concernant chacune d'elles.

Des options qui se démarquent

Cygwin et Babun

Cygwin fournit les éléments suivants:

  1. une bash Shell et le terminal Mintty,
  2. une vaste gamme d'utilitaires Linux courants compilés pour fonctionner sous Windows
  3. une couche de compatibilité complète qui permet aux programmes Linux de s'exécuter sous Windows.

Cygwin vise à faciliter le portage d'applications Linux sur Windows. Si un programme C a été conçu pour Unix et prévoit d’utiliser des fonctionnalités telles que les pipes, les fichiers de style Unix et l’accès aux répertoires e.t.c. alors vous pouvez le compiler pour Cygwin et Cygwin agira comme une couche de compatibilité entre le code et le étranger OS (Windows). Cela permet au même programme C de fonctionner sous Linux et Windows avec peu ou pas de modification. Une liste énorme de programmes Linux a donc été respectée et peut être exécutée lorsque vous installez Cygwin. Cependant, vous, l'utilisateur de ces programmes, devrez probablement connaître Unix. Par exemple, vous devrez peut-être passer des arguments tels que /cygdrive/c/autoexec.bat au lieu de c:\autoexec.bat et être prêt à gérer la sortie avec la terminaison de ligne Unix (\n) au lieu de la terminaison de ligne Windows (\r\n).

La collection de tous les programmes Cygwin comprend un référentiel et bien que Cygwin n’ait pas de gestionnaire de paquets Linux traditionnel, vous pouvez à tout moment ajouter, supprimer et mettre à jour des programmes de ce référentiel de manière très contre-intuitive (vous exécutez le fichier setup.exe de Cygwin à la page suivante). à tout moment après l'installation est terminée)

Babunest Cygwin avec un gestionnaire de paquets complet (pact), oh-my-zsh pour son shell, git, ses mises à jour automatiques et son architecture orientée plug-in. Bien que le shell par défaut soit zsh, vous pouvez facilement basculer vers bash. Cela semble être une mise à jour agréable de Vanilla Cygwin si le poids supplémentaire ne vous dérange pas.

Mingw-w64

Mingw-w64 fournit les éléments suivants:

  1. un bash shell,
  2. une bonne quantité d'utilitaires Linux,
  3. une chaîne d’outils de développement logiciel pour créer des applications qui fonctionneront sans couche de compatibilité Linux (ou avec une couche minimale).

MinGW est principalement une distribution de logiciels et une plate-forme de développement pour Windows. En particulier, il s'agit d'un port Windows des outils de compilation GNU, tels que GCC, make, bash, etc. Il inclut une bonne quantité d'outils GNU et une couche de compatibilité Unix minimale.

La principale différence entre Mingw-w64 et Cygwin concerne les priorités: Cygwin vise à fournir une couche de compatibilité POSIX complète comprenant une mise en œuvre complète de tous les principaux appels système et bibliothèques Unix. la performance est secondaire à la compatibilité. MinGW vise la performance et ne fournira donc pas certaines API POSIX qui ne peuvent pas être implémentées facilement et/ou assez rapidement sous Windows. La cible principale de MinGW est également les développeurs S/W. Néanmoins, les utilisateurs occasionnels peuvent également profiter de son Shell et des utilitaires inclus.

MSYS2 et Git pour Windows

MSYS2 fournit les éléments suivants:

  1. une bash Shell et le terminal Mintty,
  2. une bonne quantité d'utilitaires Linux,
  3. un gestionnaire de paquets en ligne de commande complet pour installer les programmes OS
  4. des composants de Cygwin et de MinGW afin de prendre en charge la création d’applications avec ou sans couche de compatibilité Linux complète.
  5. un référentiel de logiciels et un gestionnaire de paquets (pacman) facilitant l'installation, l'utilisation, la création et le portage de logiciels sous Windows.

MSYS2 est également avant tout une plate-forme de distribution de logiciels et une plate-forme de construction pour Windows comme MinGW, mais il combine à la fois le chemin de Cygwin et celui de MinGW. Vous pouvez utiliser MSYS2 pour créer "Programmes MinGW" _ ou "Programmes MSYS2". Ce dernier lien renvoie à la couche de compatibilité de MSYS2 (msys-2.dll), qui elle-même suit de près le développement de la couche de compatibilité de Cygwin avec quelques ajouts/modifications . Les référentiels des 2 projets ne sont toutefois absolument pas liés. Ainsi, bien que MSYS2 et Cygwin fournissent tous deux grep.exe, ils peuvent avoir une version complètement différente.

Git pour Windowsest simplement MSYS2 avec git installé ou au moins fortement basé sur MSYS2 . Il fournit les mêmes Shell (bash), terminal (Mintty) et gestionnaire de paquets (pacman). Il semble que ce soit le moyen le plus répandu d’exploiter Git sur Windows et un environnement Unix agréable.

Sous-système Windows pour Linux (WSL)

WSL résout le même problème en utilisant une méthode complètement différente. Vous exécutez exactement le même code que vous exécuteriez sur un système Linux sur WSL, qui intercepte les appels du noyau et les traduit en appels du noyau Windows (c'est l'inverse de Wine). Bien entendu, la traduction ne peut être parfaite, mais Microsoft a supprimé l’avertissement beta . Comme WSL n'était pas disponible sur Windows Server avant 2018, je ne l'ai pas beaucoup étudié. Quoi qu’il en soit, vous obtenez un shell bash agréable contenant la plupart des produits de la CLI que vous espérez trouver sur une installation Ubuntu standard. Microsoft déclare officiellement que "WSL ne vise pas à prendre en charge les bureaux ou les applications graphiques" , mais il existe des instructions non officielles sur la procédure à suivre. Il semble que, dans l’état actuel des choses (début 2018), les principaux inconvénients de WSL sont les suivants: a) restitution de l’écran et accès au disque sont très lents b) vous n’êtes pas censé éditer WSL (Linux ) fichiers de Windows c) il ne fonctionne que sous Windows 64 bits. Voici une comparaison ancienne mais agréable avec cygwin (notez que Rich Turner est membre de l'équipe WSL et qu'il a posté de nombreuses informations utiles concernant WSL)

Terrain d'entente

À l'exception du WSL, la plupart des outils ci-dessus partagent un grand nombre de technologies communes (bibliothèques, exécutables, concepts). Par exemple, le shell bash fourni avec MinGW dépend de msys-2.dll, qui est lui-même un fork de cygwin.dll. Alors oui, il y a beaucoup de place pour la confusion :-)

Plus d'options

Cmderfournit uniquement un terminal Nice et un shell bash-like pour Windows. Son composant principal estConemu(le terminal). En plus de cela, il ajoute Clink qui fournit édition en ligne de commande puissante de Bash-style}, une mise en page d'invite personnalisée et le jeu de couleurs Monokai. Il est hautement (ou peut-être totalement) compatible avec les programmes de console Windows natifs.

Scoopfournit un gestionnaire de paquets en ligne de commande pour de nombreux programmes multi-plateformes bien connus, notamment de nombreux outils GNU. Il télécharge des paquets pré-compilés. Il ne fournit ni shell ni terminal mais s'exécute à la place sous le cmd.exe de Windows (avec toutes ses limitations, mais aussi avec sa compatibilité totale avec les programmes de console Windows natifs). Il ne comprend également aucune suite de compilateur (bien entendu, les compilateurs et les outils de développement sont des packages typiques que vous pouvez installer avec scoop). Une grande partie des programmes installés par Scoop proviennent directement du projet MinGW/MSYS ou ont été conçus à l'aide de leurs outils.

Encore plus d'options

Les solutions ci-dessous ne semblent pas actives et je ne les ai jamais testées mais elles semblent faire le travail pour les autres:

Gow(Gnu sous Windows) est l'alternative légère à Cygwin sans Shell. Il utilise un programme d'installation Windows pratique qui installe environ 130 applications Linux open source extrêmement utiles, compilées sous forme de fichiers binaires Win32 natifs et disponibles via le fichier cmd.exe de Windows. Il est conçu pour être aussi petit que possible (environ 10 Mo).

UnxUtils & GnuWin32: UnxUtils est une collection de ports d’utilitaires communs GNU de type Unix vers Win32 natif, les exécutables ne dépendant que de le fichier Microsoft C-runtime msvcrt.dll. Vous devez télécharger la partie principale et quelques mises à jour . GnuWin32 possède des versions plus récentes que UnxUtils, mais nécessite des fichiers de support (par exemple, des DLL).

MSYS& MinGW semble avoir été obsolète par MSYS2 & MinGW-W64, je ne les ai donc jamais regardées.

Quelques problèmes courants sur Cygwin et MSYS2

Concernant le terminal

Mintty est le terminal utilisé dans Cygwin, MSYS2 et leurs dérivés. Sachez que si vous exécutez des programmes de console natifs Windows, il ne s'agit pas d'un remplacement indolore de l'invite de commande Windows. Alors que les programmes avec une sortie texte simple fonctionnent généralement bien, les programmes interactifs et plein écran ont souvent des problèmes. Lisez plus sur la page d'accueil de Mintty et lisez aussi l'entrée "Certains programmes de console natifs ne fonctionnent pas lorsqu'ils sont exécutés à partir de Git Bash" sur Git pour Windows FAQ . Cette entrée a cette recommandation à faire lorsque vous faites face à ce genre de problèmes:

Il existe plusieurs méthodes pour contourner ces problèmes:

  • Exécutez des programmes qui rencontrent des problèmes avec l'utilitaire winpty . Cela vous permet de continuer à utiliser le plus joli terminal menthe, mais peut devenir difficile à manier si vous avez besoin de la solution de contournement pour de nombreux programmes.
  • [utilisez cmd.exe] et configurez-le pour "Édition rapide", une taille raisonnable, une police de défilement arrière et unicode appropriée. Vous devrez toujours vivre avec les autres bizarreries de [cmd.exe].
  • Installez et utilisez Conemu .

Autres issues

Les deux choses les plus importantes à garder à l’esprit sont les suivantes:

  1. il y a un compromis entre le pouvoir et les problèmes difficiles à résoudre. Plus la solution est puissante, plus de problèmes peuvent survenir, même si cela ne semble initialement pas lié à votre couche Linux.

  2. si vous n'avez pas beaucoup d'expérience Linux, n'utilisez pas les solutions les plus puissantes telles que Cygwin/MSYS2/MinGW

UnxUtils et GnuWin32 ont le moins de pouvoir mais également le moins de potentiel de vous causer des maux de tête. Cygwin et autres vont égaler la puissance et les maux de tête. Cmder est quelque part au milieu. Ainsi, lorsque vous avez besoin des solutions les plus puissantes, prenez le temps de bien dormir et soyez totalement concentré. Évitez d’utiliser des solutions puissantes lorsque vous testez quelque chose de nouveau, voire instable. N'oubliez pas non plus que les solutions de complexité moyenne telles que cmder ne sont pas sans tache.

Le problème des commandes Linux masquant celles de Windows est une cause fréquente de problèmes difficiles à résoudre dans des solutions telles que Cygwin/MSYS2/MinGW. Voici un exemple: J'avais un fichier .bat qui utilisait la commande timeout. Sous Cygwin, cela échouerait car timeout est également une commande Linux mais avec une syntaxe différente. Après avoir repéré le problème, j'ai découvert que je pouvais ajouter un PATH = ... en haut du fichier .bat pour m'assurer que la commande windows était prioritaire. Mais alors j'ai une erreur encore plus cryptique "Erreur de redirection d'entrée n'est pas supportée" et j'ai opté pour une solution de contournement avant de trouver la raison.

Voici un exemple de problème avec cmder. J'utilisais la version Windows d'Unison sous Cmder et sous certaines conditions spéciales, elle était suspendue avec absolument aucun message d'erreur. La même commande fonctionnait toujours parfaitement sous cmd.exe. La chose amusante est qu’il fonctionnait également parfaitement sous Cygwin (en fait, si vous avez un nom de fichier Unicode, un terminal Cygwin est préférable à cmd.exe car cmd.exe affiche souvent du texte Unicode malformé).

A propos de ce guide

En 2017-05, j'en ai eu marre de ne pas comprendre les différences entre les outils ci-dessus, bien que j'utilise certains d'entre eux depuis longtemps (principalement CygWin et cmder, mais jamais à des fins de développement). J'ai donc passé quelques heures à saisir le paysage. Ce guide est le résultat des notes que j'ai conservées. Je ne suis pas un expert sur le terrain, mais j'ai tout fait pour trouver toutes les informations pertinentes, les lire d'un œil critique et présenter clairement les parties les plus importantes. Veuillez commenter si quelque chose ne va pas et je ferai de mon mieux pour le corriger.

Enfin des excuses pour certains problèmes de terminologie: dans ce texte, j’utilise parfois le terme Linux à la place d’UNIX ou de POSIX. Je sais qu'ils ne sont pas identiques, mais il est très difficile de les différencier lorsqu'on aborde un sujet d'une si longue distance. Même quand ce n'est pas difficile, ça prend du temps que je n'ai pas ;-)

18
ndemou

Je vous suggère de télécharger et d'installer un minimal ensemble de MinGW et également un ensemble minimal de MSYS. Le programme d'installation de MinGW vous donne une interface graphique simple pour choisir les paquets que vous voulez installer. Si tout ce que vous voulez, c'est BASH, l'installation ne prendra que quelques mégaoctets.

UPDATE: Je suis passé au MSYS2 , qui est bien plus avancé, et dispose du port de ArchLinux pacman pour la gestion des paquets. Le programme d’installation de MSYS2 a tout ce dont vous avez besoin, en plus il utilise menthe qui est absolument parfait.

10
DejanLekic

Il y a aussi Clink available sur GitHub . Il s’intègre dans la commande windows Invite à l’aide de bibliothèques de hook.

De la description du projet:

Clink associe le cmd.exe Windows Shell natif aux puissantes fonctions de modification de ligne de commande de la bibliothèque Readline GNU, qui offre des fonctionnalités avancées de complétion, d’historique et de modification de ligne.

(il ne fournit donc pas de fonctionnalités bash-as-a-programming-language ou d'autres goodies Unix)

J'utilise Linux au travail et je me retrouve parfois à tabuler dans cmd, ce qui n'agit pas comme je l'attends de Bash. Avec Clink, je peux surmonter certaines de ces lacunes.

Dernièrement, j'ai également découvert un projet prometteur, mais pas encore «fais-le-tout», appelé flinux qui émule les fonctions système Linux et fournit une sorte de système par-dessus (actuellement basé sur Arch Linux).

10
Andreas

En plus de ce que faffaffaff a déclaré , Git pour Windows inclut Bash et quelques programmes de ligne de commande Linux courants (par exemple, Vim , sed et gawk ). Il est basé sur MSYS . La version des programmes est cependant ancienne, par exemple Bash est la version 3.1. Cygwin aurait des versions plus récentes des utilitaires.

J'utilise aussi ConEmu comme émulateur de terminal (principalement pour la coloration syntaxique dans Vim, les pages à onglets et un copier-coller plus simple). console2 est également un autre émulateur de terminal populaire, même si je ne l’ai pas essayé.

7
doubleDown

C'est l'une des premières choses que je fais lorsque je configure une nouvelle machine Windows:

Une console fonctionnelle et élégante sous Windows

2
u84six

Je viens d’essayer avec Babun , qui a intégré le Cygwin en interne et qui a bon goût pour moi :)

Le fichier à télécharger est un peu gros, environ 250 Mo. Mais l'installation est simple. il n'y a pas besoin de configurer quoi que ce soit et cela fonctionne!

1
insidepower