Wie kann ich eine Bash-ähnliche Shell unter Windows verwenden?

Ich benutze Linux und einen Mac, und ich werde bald einige Kommandozeilen-Sachen unterrichten.

Was kann ich unter Windows installieren, um mir ein Terminalfenster zu geben, das einer grundlegenden Mac/Linux-Bash-Shell am ähnlichsten ist?

Ich möchte definieren können .bash_aliases so gut wie möglich.

Author: Peter Mortensen, 2013-06-15

8 answers

Sie können Cygwin oder MSYS/MinGW installieren oder eine vollständige Linux-Distribution in einer virtuellen Maschine installieren (z. B. mit VirtualBox).

 45
Author: faffaffaff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-03-19 07:43:35

Sie können jetzt das Windows-Subsystem für Linux installieren, mit dem Sie führen Sie native Linux-Shell und Tools im Benutzermodus unter Windows aus. Auf diese Weise können Sie Bash Shell direkt unter Windows ausführen und basiert auf Ubuntu.

Dies wurde in Windows 10 mit dem Anniversary Update (2016) eingeführt und ist standardmäßig nicht aktiviert. Gehen Sie wie folgt vor, um die neue Funktion auf einem Windows 10 Anniversary Update-Computer zu aktivieren:

  1. Navigieren Sie zu Einstellungen -> Update & Sicherheit - > Für Entwickler und wählen Sie "Entwicklermodus"
  2. Systemsteuerung - > Programme und Funktionen und klicken Sie oben links auf" Windows-Funktionen ein-oder ausschalten "
  3. Aktivieren Sie im Dialogfeld "Windows-Subsystem für Linux" und klicken Sie auf OK
  4. Maschine neu starten
  5. Suchen Sie nach "bash" und klicken Sie darauf, es sollte eine Eingabeaufforderung öffnen und Sie fragen, ob Sie "Ubuntu unter Windows" installieren möchten, fahren Sie mit "y" fort
  6. Nach der installation wird es fragen zu erstellen Sie einen UNIX-Benutzernamen und ein UNIX-Passwort
  7. Sie sind jetzt bereit, die Bash-Shell zu verwenden

Ein bisschen Geschichte, zurück in 2015 Projekt Astoria wurde damit begonnen, Android-Apps auf Windows zu bringen, und sie bauten ein Linux-Subsystem namens Windows Subsystem für Linux (WSL) für diesen Zweck. Schließlich wurde Project Astoria fallen gelassen, da es ihre UWP-Strategie (Universal Windows Platform) untergrub, aber einige Teile wurden beibehalten und bilden die Grundlage von Bash für Windows. Im Laufe des Kurses, Microsoft zusammenarbeit mit Canonical (Ersteller von Ubuntu Linux), um ihnen ein natives Image mit allen unterstützten Tools/Binärdateien bereitzustellen.

Weitere Informationen zur Verfügung here,
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)

 52
Author: Nemo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-09-30 04:57:45

Hier ist eine Liste der verfügbaren Optionen ab 2018-05 mit vielen Updates zu WSL ab 2020-01 sowie ein paar Details zu jedem einzelnen.

Optionen, die auffallen

Windows-Subsystem für Linux(WSL)

WSL wird immer reifer (Microsoft hat die [[16]}Beta-Warnung vor langer Zeit fallen gelassen) und ist sehr einfach zu installieren, daher ist es in den meisten Fällen eine sehr gute (wenn nicht die beste) Option. Er löst das problem mit einer anderen Methode als die meisten anderen Optionen. Sie führen genau denselben Binärcode aus, den Sie auf einem Linux-System ausführen würden. Bis 2020-01 fängt WSL Kernel-Aufrufe ab und übersetzt sie in Windows-Kernel-Aufrufe (denken Sie das Gegenteil von Wine). Dies wird sich ändern, da die aktuelle Beta von WSL einen echten Linux-Kernel in einer leichten VM ausführt.

Wie auch immer, mit WSL erhalten Sie eine schöne Shell mit fast allen CLI-Goodies, die Sie bei einer Standard-Ubuntu-Installation erwarten würden, und der Option auf apt install fast alles, was von der Repositories. Microsoft gibt offiziell an, dass "WSL unterstützt keine GUI-Desktops oder-Anwendungen" es gibt jedoch inoffizielle Anweisungen, wie es geht. Es scheint, dass im Moment (2020-01) die Hauptnachteile von WSL die folgenden sind:

Hier ist ein alter, aber schöner Vergleich mit Cygwin (beachten Sie, dass Rich Turner Mitglied des WSL-Teams ist und viele nützliche Informationen zu WSL veröffentlicht hat)

Cygwin und Babun

Cygwin stellt Folgendes bereit:

  1. eine Bash-Shell und das Mintty-Terminal,
  2. eine umfangreiche Palette gängiger Linux-Dienstprogramme, die für die Ausführung unter Windows kompiliert wurden
  3. eine umfassende Kompatibilitätsschicht, die Linux ermöglicht programme zum Ausführen unter Windows.

Cygwin zielt darauf ab, Linux-Anwendungen unter Windows einfach zu portieren. Wenn ein C-Programm für Unix entwickelt wurde und erwartet, Funktionen wie Pipes, Datei-und Verzeichniszugriff im Unix-Stil zu verwenden, können Sie es für Cygwin kompilieren, und Cygwin fungiert als Kompatibilitätsschicht zwischen dem Code und dem [[21]}fremden [[22]} Betriebssystem (Windows). Auf diese Weise kann dasselbe C-Programm sowohl unter Linux als auch unter Windows mit wenig oder keiner Änderung arbeiten. Eine riesige Liste von Linux programme wurden somit eingehalten und können bei der Installation von Cygwin ausgeführt werden. Sie, der Benutzer dieser Programme, müssen jedoch wahrscheinlich mit Unix vertraut sein. Zum Beispiel müssen Sie möglicherweise Argumente wie /cygdrive/c/autoexec.bat anstelle von c:\autoexec.bat und bereit sein, die Ausgabe mit der Unix-Zeilenbeendigung (\n) anstelle der Windows-Zeilenbeendigung (\r\n) zu behandeln.

Die Sammlung aller Cygwin-Programme umfasst ein Repository und obwohl Cygwin keinen herkömmlichen Linux-Paketmanager hat, können Sie hinzufügen, entfernen und aktualisieren Sie Programme aus diesem Repository jederzeit auf sehr kontraintuitive Weise (Sie führen Cygwins Setup aus.exe jederzeit nach die Installation abgeschlossen ist)

Babun ist Cygwin mit einem voll funktionsfähigen Paketmanager (Pact), oh-my-zsh für seine Shell, Git, automatische Updates und eine Plug-in-orientierte Architektur. Obwohl die Standard-Shell zsh ist, können Sie leicht zu bash wechseln. Es scheint ein schönes Upgrade von Vanilla Cygwin zu sein, wenn es Ihnen nichts ausmacht zusätzliches Gewicht.

Mingw-w64

Mingw-w64 bietet Folgendes:

  1. eine bash-shell,
  2. eine ganze Reihe von Linux-Dienstprogrammen,
  3. eine SW-Entwicklungs-Toolchain zum Erstellen von Apps, die ohne Linux-Kompatibilitätsebene (oder mit einer minimalen) ausgeführt werden.

MinGW ist in erster Linie eine Software-Distribution und eine Gebäudeplattform für Windows. Insbesondere ist es eine Windows-Portierung der GNU-Compiler-Tools wie GCC,make, Bash usw. Es enthält eine ganze Reihe von GNU-Tools und eine minimale Unix-Kompatibilitätsschicht.

Der Hauptunterschied zwischen Mingw-w64 und Cygwin liegt in den Prioritäten: Cygwin zielt darauf ab, eine vollständige POSIX-Kompatibilitätsschicht bereitzustellen, die eine vollständige Implementierung aller wichtigen Unix-Systemaufrufe und-bibliotheken umfasst; Die Leistung ist sekundär zur Kompatibilität. MinGW zielt auf Leistung ab, sodass bestimmte POSIX-APIs nicht einfach und/oder schnell genug unter Windows implementiert werden können. Auch MinGW-main Ziel sind S/W-Entwickler. Dennoch Gelegenheitsnutzer können auch seine Shell und die allgemeinen Zweck enthalten Dienstprogramme genießen.

MSYS2 und Git für Windows

MSYS2 bietet Folgendes:

  1. eine Bash-Shell und das Mintty-Terminal,
  2. eine ganze Reihe von Linux-Dienstprogrammen,
  3. ein voll ausgestatteter Befehlszeilenpaketmanager zum Installieren von Betriebssystemprogrammen
  4. Teile von Cygwin und MinGW zur Unterstützung von Gebäudeanwendungen mit oder ohne eine umfassende Linux-Kompatibilitätsschicht.
  5. ein Software-Repository und ein Paketmanager (Pacman), der es einfach macht, Software unter Windows zu installieren, zu verwenden, zu erstellen und zu portieren.
[[6]}MSYS2 ist auch in erster Linie eine Software-Distribution und eine Bauplattform für Windows wie MinGW, aber es kombiniert sowohl den Weg von Cygwin und den Weg von MinGW. Sie können MSYS2 verwenden, um entweder "MinGW-Programme" oder "MSYS2-Programme" zu erstellen. Der spätere Link zum kompatibilitätsschicht von MSYS2 (msys-2.dll), die selbst eng an Cygwins Entwicklung der Kompatibilitätsschicht mit ein paar Ergänzungen/Modifikationen. Die Repositorys der beiden Projekte sind jedoch völlig unabhängig. Obwohl sowohl MSYS2 als auch Cygwin grep.exe bereitstellen, haben sie möglicherweise eine völlig andere Version.

Git für Windows ist entweder nur MSYS2 mit installiertem git oder zumindest stark auf MSYS2. Es bietet die gleiche shell (bash), terminal (Mintty) und Paketmanager (Pacman). Es scheint der beliebteste Weg zu sein, um das dominante Git unter Windows zum Laufen zu bringen, und zusammen mit ihm erhalten Sie eine schöne Unix-Umgebung.

Gemeinsame Basis

Außer von WSL teilen sich die meisten der oben genannten Tools viele gängige Technologien (Bibliotheken, ausführbare Dateien, Konzepte). Zum Beispiel hängt die Bash-Shell, die mit MinGW geliefert wird, von msys-2 ab.dll, die selbst eine Gabel von Cygwin ist.dll. Also ja, es gibt viel Raum für Verwirrung :-)

Weitere Optionen

Cmder bietet nur ein schönes Terminal und eine Bash-ähnliche Shell für Windows. Es ist Hauptkomponente ist Conemu (das Terminal). Darüber hinaus fügt es Clik hinzu, das Leistungsstarke Befehlszeilenbearbeitung im Bash-Stil, ein benutzerdefiniertes Eingabeaufforderungslayout und das Monokai-Farbschema bietet. Es ist in hohem Maße (oder möglicherweise vollständig) kompatibel mit nativen Windows-Konsolenprogrammen.

Schaufel bietet einen Befehl line package Manager für viele bekannte Cross-Plattform-Programme, darunter viele GNU-Tools. Es lädt vorkompilierte Pakete herunter. Es bietet weder eine Shell noch ein Terminal , sondern läuft unter Windows ' cmd.exe (mit all seinen Einschränkungen, aber auch mit seiner vollen Kompatibilität mit nativen Windows-Konsolenprogrammen). Es enthält auch keine Compiler-Suite (aber natürlich sind Compiler und Entwicklungstools typische Pakete, die Sie mit Scoop installieren können). Viele der Programme, die Schaufel installationen stammen entweder direkt aus dem MinGW/MSYS-Projekt oder wurden mit ihren Tools erstellt.

Noch mehr Optionen

Die folgenden Lösungen scheinen nicht aktiv zu sein und ich habe sie nie getestet, aber sie scheinen die Arbeit für andere zu erledigen:

Gow (Gnu unter Windows) ist die leichte alternative zu Cygwin ohne Schale. Es verwendet ein praktisches Windows-Installationsprogramm, das etwa 130 äußerst nützliche Open-Source-Linux-Anwendungen installiert, die als native Win32-Binärdateien kompiliert wurden und über windows' cmd.exe. Es ist so klein wie möglich (ca.

UnxUtils & GnuWin32: UnxUtils ist eine Sammlung von Ports gängiger GNU-Unix-ähnlicher Dienstprogramme für natives Win32, deren ausführbare Dateien nur vom msvcrt von Microsoft C-runtime abhängen.dll. Sie müssen den Hauptteil und einige Updates herunterladen. GnuWin32 hat spätere Versionen als UnxUtils, erfordert jedoch unterstützende Dateien (z. DLLs)

MSYS & MinGW scheint von MSYS2 & MinGW-W64 obsolet gemacht zu haben, also habe ich sie nie angeschaut.

Einige häufige Probleme bei Cygwin & MSYS2

Bezüglich des Terminals

Mintty ist das Terminal, das in Cygwin, MSYS2 und ihren Derivaten verwendet wird. Man sollte sich bewusst sein, dass, wenn Sie Windows native Konsolenprogramme ausführen, es kein schmerzloser Ersatz für die Windows-Eingabeaufforderung ist. Während Programme mit einfachem Text die Ausgabe funktioniert normalerweise einwandfrei, interaktive und Vollbild-Ausgaben haben oft Probleme. Lesen Sie mehr auf Mintys Homepage und lesen Sie auch den Eintrag "Einige native Konsolenprogramme funktionieren nicht, wenn sie von Git Bash ausgeführt werden" auf Git for Windows FAQ . Dieser Eintrag enthält diese Empfehlungen, wenn Sie mit solchen Problemen konfrontiert sind:

Es gibt verschiedene Methoden, um diese Probleme zu umgehen:

  • Führen Sie Programme aus, die Probleme mit dem winpty Dienstprogramm. Dies ermöglicht es Ihnen, das schönere Mintty Terminal zu verwenden, kann aber werden unhandlich, wenn Sie die Problemumgehung für viele Programme benötigen.
  • [cmd verwenden.exe] und konfigurieren Sie es für " Schnell Bearbeiten", angemessene Größe und Scroll-Back und geeignete Unicode-Schriftart. Sie müssen immer noch mit den anderen Macken von [cmd.exe].
  • Installieren und verwenden Sie Conemu.

Weitere Ausgaben

Die beiden wichtigsten Dinge, die Sie beachten sollten, sind dieser:

  1. Es gibt einen Kompromiss zwischen Macht und schwer zu debuggenden Problemen. Je leistungsfähiger die Lösung ist, desto mehr Dinge können schief gehen, selbst auf eine Weise, die zunächst nicht mit Ihrer Linux-Schicht zusammenhängt.

  2. Wenn Sie nicht über genügend Linux-Erfahrung verfügen, verwenden Sie nicht die leistungsstärkeren Lösungen wie Cygwin / MSYS2 / MinGW

UnxUtils und GnuWin32 haben die geringste Kraft, aber auch das geringste Potenzial, Kopfschmerzen zu verursachen. Cygwin und ähnliche werden top die Bar in Kraft und Kopfschmerzen. Cmder ist irgendwo in der Mitte. Wenn Sie also die leistungsstärksten Lösungen benötigen, schlafen Sie gut und sind Sie voll konzentriert. Vermeiden Sie es, leistungsstarke Lösungen zu verwenden, während Sie etwas Neues und möglicherweise Instabiles testen. Vergessen Sie auch nicht, dass Lösungen mittlerer Komplexität wie cmder nicht makellos sind.

Das Problem der Linux-Befehle, die Windows-Befehle überschatten, ist eine häufige Ursache für schwer zu debuggende Probleme in Lösungen wie Cygwin/MSYS2 / MinGW. Hier ist ein Beispiel: Ich hatte ein .Fledermaus datei, die den Timeout-Befehl verwendet hat. Wenn es unter Cygwin ausgeführt wird, schlägt es fehl, da Timeout auch ein Linux-Befehl mit unterschiedlicher Syntax ist. Nachdem ich das Problem entdeckt habe, fand ich heraus, dass ich einen PATH = hinzufügen konnte... an der Spitze der .bat-Datei, um sicherzustellen, dass der Windows-Befehl Priorität hatte. Aber dann bekam ich einen noch kryptischeren Fehler "Eingabeumleitung wird nicht unterstützt" und entschied mich für eine Problemumgehung, bevor ich den Grund fand.

Hier ist ein Beispiel für ein Problem mit cmder. Ich bin gerannt die Windows-Version von unison unter Cmder und unter einigen besonderen Bedingungen hing es mit absolut keine Fehlermeldung. Der gleiche Befehl lief immer perfekt unter cmd.exe. Das Lustige ist, dass es auch unter Cygwin perfekt lief (wenn Sie Unicode-Dateinamen haben, ist ein Cygwin-Terminal besser als cmd.exe-Datei, da Sie cmd ein.exe zeigt häufig Unicode-Text fehlerhaft an).

Über diesen Leitfaden

Während 2017-05 habe ich es satt, das nicht zu verstehen unterschiede der oben genannten Tools, obwohl ich einige von ihnen schon vor langer Zeit verwendet habe (hauptsächlich CygWin und cmder, aber nie zu Entwicklungszwecken). So verbrachte ich ein paar Stunden, um die Landschaft grok. Diese Anleitung ist das Ergebnis der Notizen, die ich aufbewahrt habe. Ich bin kein Experte auf diesem Gebiet, aber ich habe mich bemüht, alle relevanten Informationen zu finden, sie kritisch zu lesen und die wichtigsten Teile klar darzustellen. Bitte kommentieren Sie, wenn etwas falsch scheint und ich werde mein Bestes tun, um es zu korrigieren.

Endlich eine Entschuldigung für einige Terminologieprobleme: In diesem Text verwende ich manchmal den Begriff Linux anstelle von UNIX oder POSIX. Ich weiß, dass sie nicht gleich sind, aber es ist sehr schwierig, zwischen ihnen zu unterscheiden, wenn man sich einem Thema aus so großer Entfernung nähert. Selbst wenn es nicht schwer ist, braucht es Zeit, die ich nicht habe ; -)

 24
Author: ndemou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-02-09 13:06:38

Es gibt auch Clink verfügbar bei GitHub. Es integriert sich mithilfe von Hook-Bibliotheken in die Windows - Eingabeaufforderung.

Aus der Projektbeschreibung:

Klirren verbindet die native Windows-shell cmd.exe mit den Mächtigen command-line-editing-features von der GNU Readline-Bibliothek, die bietet umfangreiche Vervollständigungs -, Verlaufs-und Zeilenbearbeitungsfunktionen.

(daher werden keine Bash-as-a-Programmiersprachen-Funktionen oder andere Unix-Funktionen bereitgestellt leckereien)

Ich benutze Linux bei der Arbeit und finde mich manchmal in cmd, was sich nicht so verhält, wie ich es von Bash erwarte. Mit Clink kann ich einige dieser Mängel überwinden.

In letzter Zeit entdeckte ich auch ein vielversprechendes, aber noch nicht 'can-do-all' - Projekt namens flinux, das Linux-Systemfunktionen emuliert und eine Art System darüber bietet (derzeit basierend auf Arch Linux)

 11
Author: Andreas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-05-03 15:41:32

Ich würde vorschlagen, dass Sie einen minimalen Satz von MinGW und auch einen minimalen Satz von MSYS herunterladen und installieren. Das MinGW-Installationsprogramm bietet Ihnen eine einfache GUI, mit der Sie auswählen können, welche Pakete Sie installieren möchten. Wenn Sie nur BASH möchten, dauert die Installation nicht mehr als einige Megabyte.

UPDATE: Ich bin zu MSYS2 gewechselt, das weitaus fortgeschrittener ist und über einen Port des ArchLinux pacman-Tools für die Paketverwaltung verfügt. MSYS2 Installer hat alles, was Sie brauchen, und es verwendet mintty das ist absolut perfekt .

 10
Author: DejanLekic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-09-08 08:05:23

Zusätzlich zu was faffaffaff sagte, Git für Windows enthält Bash und einige gängige Linux-Befehlszeilenprogramme (z. B. Vim, sed und gawk). Es basiert auf MSYS. Die Version der Programme ist jedoch alt, zum Beispiel ist Bash Version 3.1. Cygwin hätte neuere Versionen der Dienstprogramme.

Ich verwende auch ConEmu als Terminalemulator (hauptsächlich zur Syntaxhervorhebung in Vim, Registerkarten und einfacher kopieren-einfügen). console2 ist auch ein weiterer beliebter Terminalemulator, obwohl ich es nicht ausprobiert habe.

 7
Author: doubleDown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-05-23 12:41:44

Dies ist eines der ersten Dinge, die ich beim Einrichten eines neuen Windows-Computers mache:

Eine funktionale und elegante Konsole in Windows

 2
Author: u84six,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-06-16 22:50:19

Ich habe es gerade mit Babun versucht, das den Cygwin intern integriert hat und mir gut schmeckt:)

Die Download-Datei etwas groß, um 250 MB. Aber die installation ist einfach; es gibt keine Notwendigkeit, etwas zu konfigurieren und es funktioniert einfach!

 1
Author: insidepower,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-03-19 07:50:50