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

Hoe kan ik een Bash-achtige shell gebruiken op Windows?

Ik gebruik Linux en een Mac, en ik ga binnenkort wat command line dingen leren.

Wat kan ik op Windows installeren om me een terminal venster te geven dat het meest lijkt op een basis Mac/Linux Bash shell?

Ik zou, indien mogelijk, ook .bash_aliases willen kunnen definiëren.

Antwoorden (8)

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

U kunt nu het Windows Subsystem for Linux installeren, waarmee u native user-mode Linux shell en tools op Windows kunt draaien. Hiermee kunt u Bash shell direct op Windows uitvoeren en het is gebaseerd op Ubuntu.

Dit is geïntroduceerd in Windows 10 met de Anniversary Update (2016) en is niet standaard ingeschakeld. Om de nieuwe functie op een Windows 10 Anniversary Update-machine in te schakelen, doet u het volgende:

  1. Navigeer naar Instellingen -> Update & beveiliging -> Voor ontwikkelaars en selecteer “Ontwikkelaarsmodus”
  2. Configuratiescherm -> Programma’s en onderdelen en klik op “Windows-functies in- of uitschakelen” in het deelvenster linksboven
  3. In het dialoogvenster vinkt u “Windows Subsysteem voor Linux” aan en klikt u op Ok
  4. Herstart de machine
  5. Zoek naar “bash” en klik erop, het zou een commando prompt moeten openen en je vragen of je “Ubuntu on Windows” wilt installeren, ga door met “y”
  6. Na de installatie zal het vragen om een UNIX gebruikersnaam en wachtwoord aan te maken
  7. Je bent nu klaar om de bash shell te gebruiken

Een beetje geschiedenis, terug in 2015 project Astoria werd gestart om Android apps naar Windows te brengen en ze bouwden een Linux subsysteem genaamd Windows Subsystem for Linux (WSL) voor het doel. Uiteindelijk werd project Astoria gedropt omdat het hun UWP (Universal Windows Platform) strategie ondermijnde, maar sommige delen werden behouden en vormen de basis van bash voor Windows. In de loop van de tijd heeft Microsoft samengewerkt met Canonical (makers van Ubuntu Linux) om hen te voorzien van een native image met alle ondersteunde tools/binaire bestanden.

Meer informatie is hier beschikbaar, 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)

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

U zou Cygwin of MSYS/MinGW kunnen installeren, of u zou een volledige Linux distributie in een virtuele machine kunnen installeren (bijvoorbeeld met VirtualBox ).

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

Hier is een lijst van de beschikbare opties vanaf 2018-05 met een groot aantal updates betreffende WSL vanaf 2020-01, samen met een beetje detail over elk van hen.

Opties die eruit springen

* Windows Subsystem for Linux(WSL) **

WSL wordt steeds volwassener (Microsoft heeft de beta waarschuwing al lang geleden laten vallen) en is erg makkelijk te installeren dus in de meeste gevallen is het een erg goede (zo niet de beste) optie. Het lost het probleem op met een andere methode dan de meeste andere opties. Je draait exact dezelfde binaire code die je op een Linux systeem zou draaien. Tot 2020-01 onderschept WSL kernel calls en vertaalt ze naar windows kernel calls (denk het tegenovergestelde van Wine). Dit zal veranderen aangezien de huidige beta van WSL een echte Linux kernel draait in een lichtgewicht VM. Hoe dan ook, met WSL krijg je een mooie shell met bijna alle CLI goodies die je zou verwachten te vinden op een standaard Ubuntu installatie en de optie om apt install bijna alles wat beschikbaar is uit de repositories te gebruiken. Microsoft stelt officieel dat [ “WSL does not aim to support GUI desktops or applications” ]/cygdrive/c/autoexec.bat maar er zijn onofficiële instructies over hoe je dat moet doen. Het lijkt erop dat zoals de zaken er nu voor staan (2020-01) de belangrijkste nadelen van WSL de volgende zijn:

Hier is een oude maar leuke vergelijking met cygwin (merk op dat Rich Turner lid is van het WSL team en hij heeft veel nuttige info over WSL gepost)

Cygwin en Babun

Cygwin biedt het volgende:

  1. een bash-shell en de Mintty-terminal,
  2. een uitgebreide reeks veelgebruikte Linux-hulpprogramma’s, gecompileerd om op Windows te draaien
  3. een uitgebreide compatibiliteitslaag waarmee Linux-programma’s op Windows kunnen draaien.

Cygwin is bedoeld om het porten van Linux applicaties naar Windows gemakkelijk te maken. Als een C-programma is ontworpen voor Unix en functies verwacht te gebruiken als pipes, Unix-stijl bestand- en directorytoegang, enzovoort, dan kun je het compileren voor Cygwin en Cygwin zal fungeren als een compatibiliteitslaag tussen de code en het vreemde OS (Windows). Hierdoor kan hetzelfde C programma zowel op Linux als op Windows werken met weinig of geen aanpassingen. Een enorme lijst van Linux programma’s is aldus samengesteld en kan worden uitgevoerd wanneer u Cygwin installeert. U, de gebruiker van deze programma’s, zult echter waarschijnlijk bekend moeten zijn met Unix. U zult bijvoorbeeld argumenten als c:\autoexec.bat moeten doorgeven in plaats van \n en klaar moeten zijn om om te gaan met uitvoer met Unix regeleinde (\r\n) in plaats van Windows regeleinde (grep.exe).

De verzameling van alle Cygwin programma’s vormen een repository en hoewel Cygwin geen traditionele Linux package manager heeft, kunt u op ieder moment programma’s uit deze repository toevoegen, verwijderen en updaten op een zeer contra-intuïtieve manier (u voert Cygwin’s setup. exe op elk gewenst moment na de installatie is voltooid)

  • Babun ** is Cygwin met een volledig uitgeruste pakketbeheerder (pact), oh-my-zsh voor zijn shell, git, automatische updates en een plug-in georiënteerde architectuur. Hoewel de standaard shell zsh is, kun je gemakkelijk overschakelen naar bash. Het lijkt een aardige upgrade van vanilla Cygwin als je het extra gewicht niet erg vindt.

Mingw-w64

Mingw-w64 biedt het volgende:

  1. een bash shell,
  2. een behoorlijke hoeveelheid Linux utilities,
  3. een SW ontwikkel toolchain om apps te bouwen die zonder Linux compatibiliteitslaag draaien (of met een minimale).

MinGW is in de eerste plaats een software distributie en een bouwplatform voor Windows. In het bijzonder is het een Windows port van de GNU compiler gereedschappen, zoals GCC, make, bash, enzovoort. Het bevat een redelijke hoeveelheid GNU-gereedschappen en een minimale Unix-compatibiliteitslaag.

Het belangrijkste verschil tussen Mingw-w64 en Cygwin zit hem in de prioriteiten: Cygwin wil een volledige POSIX-compatibiliteitslaag leveren, bestaande uit een volledige implementatie van alle belangrijke Unix systeemaanroepen en bibliotheken; prestatie is ondergeschikt aan compatibiliteit. MinGW is gericht op prestaties en zal daarom bepaalde POSIX API’s niet aanbieden die niet eenvoudig en/of snel genoeg onder Windows geïmplementeerd kunnen worden. Ook is MinGW’s hoofddoel S/W ontwikkelaars. Niettemin kunnen ook gewone gebruikers plezier beleven aan de shell en de meegeleverde hulpprogramma’s voor algemene doeleinden.

MSYS2 en Git voor Windows

MSYS2 biedt het volgende:

  1. een bash shell en de Mintty terminal,
  2. een behoorlijke hoeveelheid Linux utilities,
  3. een volledig uitgeruste command line package manager om OS programma’s te installeren
  4. onderdelen van zowel Cygwin als MinGW om het bouwen van applicaties te ondersteunen, met of zonder een uitgebreide Linux compatibiliteitslaag.
  5. een software repository en een package manager (pacman) die het makkelijk maakt om software onder Windows te installeren, gebruiken, bouwen en porten.

MSYS2 is ook in de eerste plaats een software distributie en een bouwplatform voor Windows zoals MinGW, maar het combineert zowel de manier van Cygwin als de manier van MinGW. Je kunt MSYS2 gebruiken om “MinGW programma’s” of “MSYS2 programma’s” te maken. Deze laatste zijn gekoppeld aan de compatibiliteitslaag van MSYS2 (msys-2.dll) die op zijn beurt de ontwikkeling van de compatibiliteitslaag van Cygwin volgt met een paar toevoegingen/wijzigingen . De repositories van de 2 projecten zijn echter totaal niet aan elkaar gerelateerd. Dus hoewel zowel MSYS2 als Cygwin 0x6& leveren, kunnen ze een compleet andere versie hebben.

  • Git voor Windows ** is ofwel gewoon MSYS2 met git geïnstalleerd of op zijn minst zwaar gebaseerd op MSYS2 . Het biedt dezelfde shell (bash), terminal (Mintty) en pakketbeheerder (pacman). Het lijkt de meest populaire manier te zijn om het dominante Git draaiende te krijgen op Windows en samen met het krijg je een mooie Unix omgeving.

Gemeenschappelijke grond

Behalve WSL delen de meeste van de bovenstaande tools veel gemeenschappelijke technologie (bibliotheken, uitvoerbare bestanden, concepten). Bijvoorbeeld de bash shell die bij MinGW zit hangt af van msys-2.dll die zelf weer een fork is van cygwin.dll. Dus ja, er is genoeg ruimte voor verwarring :-)

Meer opties

  • Cmder ** biedt gewoon een mooie terminal en een bash-achtige shell voor Windows. Het belangrijkste onderdeel is * Conemu ** (de terminal). Daarbovenop voegt het Clink toe dat Powerful Bash-style command line editing biedt, een aangepaste prompt layout en het Monokai kleurenschema. Het is zeer (of misschien wel volledig) compatibel met native Windows console programma’s.

  • Scoop ** biedt een command line package manager voor veel bekende cross-platform programma’s, waaronder veel GNU tools. Het downloadt voor-gecompileerde pakketten. Het biedt geen shell of terminal, maar draait in plaats daarvan onder Windows’ cmd.exe (met al zijn beperkingen, maar ook met volledige compatibiliteit met Windows consoleprogramma’s). Het bevat ook geen compiler suite (maar natuurlijk zijn compilers en ontwikkelgereedschappen typische pakketten die je met scoop kunt installeren). Veel van de programma’s die Scoop installeert komen direct van het MinGW/MSYS project, of zijn gebouwd met hun gereedschappen.

Nog meer opties

De oplossingen hieronder lijken niet actief en ik heb ze nooit getest, maar ze lijken de klus te klaren voor anderen:

  • Gow ** (Gnu On Windows) is het lichtgewicht alternatief voor Cygwin zonder shell. Het gebruikt een handig Windows installatieprogramma dat ongeveer 130 uiterst nuttige open source Linux toepassingen installeert, gecompileerd als native win32 binaries en beschikbaar via windows’ cmd.exe. Het is ontworpen om zo klein mogelijk te zijn (ongeveer 10 MB).

  • UnxUtils & GnuWin32 **: UnxUtils is een verzameling ports van algemene GNU Unix-achtige hulpprogramma’s naar native Win32, met uitvoerbare bestanden die alleen afhankelijk zijn van de Microsoft C-runtime msvcrt.dll. U moet het hoofddeel en een paar updates downloaden. GnuWin32 heeft latere versies dan UnxUtils, maar vereist ondersteunende bestanden (b.v. DLL’s)

MSYS & MinGW lijken te zijn verouderd ](https://stackoverflow.com/questions/25019057/how-are-msys-msys2-and-msysgit-related-to-each-other) door MSYS2 & MinGW-W64, dus ik heb er nooit naar gekeken.

Enkele veel voorkomende problemen op Cygwin & MSYS2

Wat betreft de terminal

Mintty is de terminal die gebruikt wordt in Cygwin, MSYS2 en hun derivaten. Men moet zich ervan bewust zijn dat als u windows native consoleprogramma’s draait, het geen pijnloze vervanging is voor de Windows Opdrachtprompt. Terwijl programma’s met eenvoudige tekstuitvoer meestal prima werken, hebben interactieve en schermvullende programma’s vaak problemen. Lees meer op Mintty’s homepage en lees ook het item “Sommige native console programma’s werken niet als je ze uitvoert vanuit Git Bash” op Git voor Windows FAQ . Dat item heeft deze aanbevelingen voor als je met dit soort problemen te maken krijgt:

Er zijn verschillende methodes om deze problemen te omzeilen:

  • Draai programma’s die problemen hebben met het winpty hulpprogramma. Dit stelt u in staat om de mooiere mintty terminal te blijven gebruiken, maar kan onhandelbaar worden als u de workaround voor veel programma’s nodig hebt.
  • [gebruik cmd.exe] en configureer het voor “Snel Bewerken”, redelijke grootte en scroll-back en geschikt unicode font. Je zult nog steeds moeten leven met de andere eigenaardigheden van [cmd.exe].
  • Installeer en gebruik Conemu .

Andere problemen

De twee belangrijkste dingen om in gedachten te houden zijn deze:

  1. Er is een wisselwerking tussen kracht en moeilijk te debuggen problemen. Hoe krachtiger de oplossing, hoe meer er mis kan gaan, zelfs op manieren die in eerste instantie niets met je Linux-laag te maken lijken te hebben.

  2. Als je niet veel Linux ervaring hebt, gebruik dan niet de krachtigere oplossingen zoals Cygwin/MSYS2/MinGW

UnxUtils en GnuWin32 hebben de minste kracht maar ook de minste mogelijkheid om je hoofdpijn te bezorgen. Cygwin en gelijksoortige programma’s staan bovenaan in zowel kracht als hoofdpijn. Cmder zit ergens in het midden. Dus wanneer u de krachtigste oplossingen nodig hebt, neem dan een goede nachtrust en wees volledig geconcentreerd. Vermijd het gebruik van krachtige oplossingen tijdens het testen van iets nieuws en mogelijk instabiel. Vergeet ook niet dat medium-complexe oplossingen zoals cmder niet vlekkeloos zijn.

Het probleem van Linux commando’s die Windows commando’s overschaduwen is een veel voorkomende oorzaak van moeilijk te debuggen problemen in oplossingen zoals Cygwin/MSYS2/MinGW. Hier is een voorbeeld: Ik had een .bat bestand dat het timeout commando gebruikte. Wanneer het onder Cygwin werd uitgevoerd, zou het mislukken omdat timeout ook een Linux commando is, maar met een andere syntaxis. Nadat ik het probleem had gevonden, ontdekte ik dat ik een PATH=… kon toevoegen bovenaan het .bat bestand om er zeker van te zijn dat het Windows commando voorrang had. Maar toen kreeg ik een nog cryptischer “Input redirection is not supported” foutmelding en nam genoegen met een workaround voordat ik de reden had gevonden.

Hier is een voorbeeld van een probleem met cmder. Ik was de Windows versie van unison aan het draaien onder Cmder en onder sommige speciale omstandigheden bleef het hangen met absoluut geen foutmelding. Hetzelfde commando draaide altijd perfect onder cmd.exe. Het grappige is dat het ook perfect werkte onder Cygwin (in feite, als je Unicode bestandsnamen hebt, is een Cygwin terminal beter dan cmd.exe omdat cmd.exe vaak Unicode tekst misvormd weergeeft).

Over deze gids

In de loop van 2017-05 werd ik ziek van het niet begrijpen van de verschillen tussen de bovenstaande tools, hoewel ik sommige van hen al sinds lang geleden gebruikte (voornamelijk CygWin en cmder, maar nooit voor ontwikkelingsdoeleinden). Dus spendeerde ik een paar uur om het landschap te doorgronden. Deze gids is het resultaat van de notities die ik bijhield. Ik ben geen expert op dit gebied, maar ik heb mijn best gedaan om alle relevante informatie te vinden, het met een kritisch oog te lezen en de belangrijkste delen duidelijk te presenteren. Geef commentaar als er iets fout lijkt te zijn en ik zal mijn best doen om het te corrigeren.

Tot slot een verontschuldiging voor enkele terminologische kwesties: In deze tekst gebruik ik soms de term Linux in plaats van UNIX of POSIX. Ik weet dat ze niet hetzelfde zijn, maar het is erg moeilijk om ze van elkaar te onderscheiden als je een onderwerp van zo'n grote afstand benadert. Zelfs als het niet moeilijk is, kost het tijd die ik niet heb ;-)

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

Ik stel voor dat je een minimale set van MinGW en ook een minimale set van MSYS download en installeert. De MinGW installer geeft je een gemakkelijke GUI om te kiezen welke pakketten je geïnstalleerd wilt hebben. Als je alleen BASH wilt, dan zal de installatie niet meer dan een paar megabytes in beslag nemen.

UPDATE: Ik ben overgestapt op de MSYS2 die veel geavanceerder is, en een port heeft van ArchLinux pacman tool voor package management. MSYS2 installatieprogramma heeft alles wat je nodig hebt, plus het gebruikt mintty wat absoluut perfect is.

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

Er is ook Clink beschikbaar op GitHub . Het integreert zichzelf in windows command prompt met behulp van hook libraries.

Van de project beschrijving:

Clink combineert de Windows-shell cmd.exe met de krachtige functies voor het bewerken van de opdrachtregel van de GNU Readline-bibliotheek, die uitgebreide aanvullings-, geschiedenis- en regelbewerkingsmogelijkheden biedt.

(dus het biedt geen bash-als-een-programmeertaal functies of andere Unix goodies)

Ik gebruik Linux op het werk en merk dat ik soms met tabs rondga in cmd, dat niet doet zoals ik het van Bash verwacht. Met Clink kan ik een aantal van deze tekortkomingen verhelpen.

De laatste tijd ontdekte ik ook een veelbelovend, maar nog niet ‘can-do-all’ project genaamd flinux dat Linux systeem functies emuleert en een soort van systeem er bovenop levert (momenteel gebaseerd op Arch Linux)

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

Naast wat faffaff zei , bevat Git voor Windows Bash en enkele veelgebruikte Linux commandoregel programma’s (b.v. Vim , sed , en gawk ). Het is gebaseerd op MSYS . De versie van de programma’s is echter oud, bijvoorbeeld Bash is versie 3.1. Cygwin ](http://en.wikipedia.org/wiki/Cygwin) zou recentere versies van de hulpprogramma’s hebben.

Ik gebruik ook ConEmu als terminal emulator (hoofdzakelijk voor syntax highlighting in Vim, tabbladzijden, en gemakkelijker copy-pasten). console2 is ook een andere populaire terminal emulator hoewel ik die nog niet geprobeerd heb.

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

Dit is een van de eerste dingen die ik doe als ik een nieuwe Windows machine opzet: Een functionele en gestroomlijnde console in Windows

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

Ik heb het net geprobeerd met Babun , die de Cygwin intern integreerde, en het smaakt me goed : )

Het download bestand is een beetje groot, ongeveer 250 MB. Maar de installatie is ongecompliceerd; je hoeft niets te configureren en het werkt gewoon!