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

Jak mogę używać powłoki podobnej do Bash w Windows?

Advertisement

Używam Linuksa i Maca, a wkrótce będę uczył niektórych rzeczy z linii poleceń.

Co mogę zainstalować w systemie Windows, aby uzyskać okno terminala najbardziej podobne do podstawowej powłoki Mac/Linux Bash?

Chciałbym mieć możliwość definiowania .bash_aliases również, jeśli to możliwe.

Advertisement
Advertisement

Odpowiedzi (8)

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

Możesz teraz zainstalować Podsystem Windows dla Linuksa, który pozwala na uruchamianie natywnej powłoki i narzędzi Linuksa w trybie użytkownika w systemie Windows_. Pozwala to na uruchomienie powłoki Bash bezpośrednio w systemie Windows i jest oparte na Ubuntu.

Została ona wprowadzona w systemie Windows 10 wraz z aktualizacją Anniversary Update (2016) i nie jest domyślnie włączona. Aby włączyć nową funkcję na maszynie z Windows 10 Anniversary Update, wykonaj następujące czynności:

  1. Przejdź do Ustawienia -> Aktualizacja i zabezpieczenia -> Dla programistów i wybierz “Tryb programisty”
  2. Panel sterowania - Programy i funkcje i kliknij “Włącz lub wyłącz funkcje systemu Windows” w lewym górnym panelu
  3. W oknie dialogowym, zaznacz “Windows Subsystem for Linux” i kliknij Ok
  4. Uruchom ponownie komputer
  5. Wyszukaj “bash” i kliknij na niego, powinien otworzyć wiersz poleceń i zapytać, czy chcesz zainstalować “Ubuntu na Windows”, kontynuuj z “y”
  6. Po instalacji zostaniesz poproszony o utworzenie UNIX-owej nazwy użytkownika i hasła
  7. Jesteś teraz gotowy do korzystania z powłoki bash

Trochę historii, z powrotem w 2015 roku projekt Astoria został uruchomiony, aby przynieść aplikacje Android do systemu Windows i zbudowali podsystem Linux o nazwie Windows Subsystem for Linux (WSL) do tego celu. Ostatecznie projekt Astoria został porzucony, ponieważ podważał ich strategię UWP (Universal Windows Platform), ale niektóre części zostały zachowane i stanowią podstawę bash dla Windows. Z biegiem czasu, Microsoft współpracował z Canonical (twórcy Ubuntu Linux), aby zapewnić im natywny obraz z wszystkimi obsługiwanymi narzędziami / binariami.

Więcej informacji można znaleźć tutaj, 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 (wideo)

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

Możesz zainstalować Cygwin lub MSYS/MinGW , lub możesz zainstalować pełną dystrybucję Linuksa w maszynie wirtualnej (na przykład, używając VirtualBox ).

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

Oto lista opcji dostępnych od 2018-05 z mnóstwem aktualizacji dotyczących WSL od 2020-01 wraz z odrobiną szczegółów dotyczących każdej z nich.

Opcje, które się wyróżniają

* Windows Subsystem for Linux(WSL) **

WSL staje się coraz bardziej dojrzały (Microsoft porzucił ostrzeżenie o beta dawno temu) i jest bardzo łatwy do zainstalowania, więc w większości przypadków jest bardzo dobrą (jeśli nie najlepszą) opcją. Rozwiązuje problem za pomocą innej metody niż większość innych opcji. Uruchamiasz dokładnie ten sam kod binarny, który uruchomiłbyś na systemie Linux. Do 2020-01 WSL przechwytuje wywołania jądra i tłumaczy je na wywołania jądra Windows (pomyśl o przeciwieństwie do Wine). To się zmieni, ponieważ obecna beta WSL uruchamia prawdziwe jądro linuksa w lekkiej maszynie wirtualnej.

W każdym razie, z WSL dostajesz ładną powłokę z prawie wszystkimi udogodnieniami CLI, które można znaleźć w instalacji Ubuntu i możliwość apt install prawie wszystko dostępne z repozytoriów. Microsoft oficjalnie twierdzi, że “WSL nie ma na celu wspierania pulpitów GUI lub aplikacji” jednak istnieją nieoficjalne instrukcje, jak to zrobić. Wydaje się, że w obecnej sytuacji (2020-01) główne wady WSL są następujące:

Oto stare, ale ładne porównanie z cygwin (zauważ, że Rich Turner jest członkiem zespołu WSL i zamieścił wiele przydatnych informacji dotyczących WSL)

Cygwin i Babun

Cygwin zapewnia następujące rzeczy:

  1. powłokę bash i terminal Mintty,
  2. obszerną gamę popularnych narzędzi linuksowych skompilowanych do działania w Windows
  3. wszechstronną warstwę kompatybilności, która umożliwia uruchamianie programów linuksowych w Windows.

Cygwin ma na celu ułatwienie przenoszenia aplikacji linuksowych na Windows. Jeśli jakiś program w języku C został zaprojektowany dla Uniksa i oczekuje, że będzie wykorzystywał takie funkcje jak rury, dostęp do plików i katalogów w stylu Uniksa itp., to można go skompilować dla Cygwina, a Cygwin będzie działał jako warstwa kompatybilności pomiędzy kodem a obcym systemem operacyjnym (Windows). Dzięki temu ten sam program w C może działać zarówno w Linuksie jak i Windowsie z niewielkimi lub żadnymi modyfikacjami. W ten sposób powstała ogromna lista programów linuksowych, które można uruchomić po zainstalowaniu Cygwina. Jednak ty, użytkownik tych programów, prawdopodobnie będziesz musiał być zaznajomiony z Uniksem. Na przykład, możesz potrzebować przekazywać argumenty takie jak /cygdrive/c/autoexec.bat zamiast c:\autoexec.bat i być przygotowanym na obsługę wyjścia z uniksową terminacją linii (\n) zamiast terminacji linii Windows (\r\n).

Zbiór wszystkich programów Cygwin składa się na repozytorium i chociaż Cygwin nie ma tradycyjnego linuksowego menedżera pakietów, możesz dodawać, usuwać i aktualizować programy z tego repozytorium w dowolnym momencie w bardzo sprzeczny z intuicją sposób (uruchamiasz setup. exe w dowolnym momencie po zakończeniu instalacji)

  • Babun ** to Cygwin z w pełni funkcjonalnym menedżerem pakietów (pact), oh-my-zsh dla swojej powłoki, git, automatycznymi aktualizacjami i architekturą zorientowaną na wtyczki. Chociaż domyślną powłoką jest zsh, można łatwo przełączyć się na bash. Wydaje się, że jest to miły upgrade z waniliowego Cygwina, jeśli nie przeszkadza ci dodatkowy ciężar.

Mingw-w64

Mingw-w64 zapewnia następujące możliwości:

  1. powłokę bash,
  2. sporą ilość narzędzi linuksowych,
  3. łańcuch narzędzi programistycznych SW do budowania aplikacji, które będą działać bez warstwy kompatybilności z Linuksem (lub z minimalną).

MinGW jest przede wszystkim dystrybucją oprogramowania i platformą budowlaną dla Windows. W szczególności jest to Windowsowy port narzędzi GNU do kompilacji, takich jak GCC, make, bash, itd. Zawiera sporo narzędzi GNU i minimalną warstwę kompatybilności z Uniksem.

Główna różnica pomiędzy Mingw-w64 a Cygwin polega na priorytetach: Cygwin dąży do zapewnienia kompletnej warstwy kompatybilności POSIX, zawierającej pełną implementację wszystkich głównych wywołań systemowych i bibliotek Uniksa; wydajność jest drugorzędna w stosunku do kompatybilności. Celem MinGW jest wydajność, więc nie będzie on dostarczał pewnych POSIX-owych API, których nie da się łatwo i/lub wystarczająco szybko zaimplementować pod Windows. Również głównym celem MinGW są programiści S/W. Niemniej jednak zwykli użytkownicy mogą również cieszyć się jego powłoką i dołączonymi narzędziami ogólnego przeznaczenia.

MSYS2 i Git for Windows

MSYS2 zapewnia następujące możliwości:

  1. powłokę bash i terminal Mintty,
  2. sporą ilość narzędzi linuksowych,
  3. w pełni funkcjonalny menedżer pakietów z wierszem poleceń do instalowania programów OS
  4. części zarówno z Cygwin, jak i MinGW, aby wspierać budowanie aplikacji zarówno z kompleksową warstwą kompatybilności z Linuksem, jak i bez niej.
  5. repozytorium oprogramowania i menedżer pakietów (pacman), który ułatwia instalowanie, używanie, budowanie i przenoszenie oprogramowania w systemie Windows.

MSYS2 jest również jest przede wszystkim dystrybucją oprogramowania i platformą budowlaną dla Windows jak MinGW, ale łączy w sobie zarówno sposób działania Cygwina jak i MinGW. Możesz używać MSYS2 do tworzenia “programów MinGW” lub “programów MSYS2”. Późniejsze łączą się z warstwą kompatybilności MSYS2 (msys-2.dll), która sama ściśle podąża za rozwojem warstwy kompatybilności Cygwin z kilkoma dodatkami/modyfikacjami . Repozytoria tych dwóch projektów są jednak całkowicie niepowiązane. Więc chociaż zarówno MSYS2 jak i Cygwin dostarczają grep.exe, mogą mieć zupełnie inną wersję.

  • Git dla Windows ** jest albo po prostu MSYS2 z zainstalowanym gitem, albo przynajmniej mocno oparty na MSYS2 . Udostępnia tę samą powłokę (bash), terminal (Mintty) i menedżera pakietów (pacman). Wydaje się, że jest to najpopularniejszy sposób na uzyskanie dominującego Gita działającego na Windowsie, a wraz z nim otrzymujesz miłe środowisko uniksowe.

Common ground

Z wyjątkiem WSL większość z powyższych narzędzi ma wiele wspólnych technologii (biblioteki, pliki wykonywalne, koncepcje). Na przykład powłoka bash dostarczana z MinGW zależy od msys-2.dll, która sama jest rozwidleniem cygwin.dll. Więc tak, jest wiele miejsca na pomyłki :-)

Więcej opcji

  • Cmder ** zapewnia po prostu ładny terminal i powłokę podobną do bash dla Windows. Jego głównym komponentem jest * Conemu ** (terminal). Na dodatek dodaje Clink, który zapewnia potężną edycję linii poleceń w stylu Bash, niestandardowy układ znaku zachęty i schemat kolorów Monokai. Jest wysoce (a może w pełni) kompatybilny z natywnymi programami konsolowymi Windows.

  • Scoop ** zapewnia menedżer pakietów w wierszu poleceń dla wielu dobrze znanych programów wieloplatformowych, w tym wielu narzędzi GNU. Pobiera on prekompilowane pakiety. Nie dostarcza ani powłoki ani terminala_, ale zamiast tego działa pod windowsowym cmd.exe (ze wszystkimi jego ograniczeniami, ale także z pełną kompatybilnością z natywnymi windowsowymi programami konsolowymi). Nie zawiera również zestawu kompilatorów (ale oczywiście kompilatory i narzędzia programistyczne są typowymi pakietami, które można zainstalować za pomocą scoopa). Wiele programów, które instaluje Scoop pochodzi bezpośrednio z projektu MinGW/MSYS lub zostało zbudowanych przy użyciu ich narzędzi.

Jeszcze więcej opcji

Poniższe rozwiązania nie wydają się być aktywne i nigdy ich nie testowałem, ale wydaje się, że wykonują swoją pracę dla innych:

  • Gow ** (Gnu On Windows) jest lekką alternatywą dla Cygwin bez powłoki. Używa wygodnego instalatora Windows, który instaluje około 130 niezwykle użytecznych aplikacji open source dla Linuksa, skompilowanych jako natywne binaria Win32 i dostępnych przez windowsowy cmd.exe. Został zaprojektowany tak, aby był tak mały jak to tylko możliwe (około 10 MB).

  • UnxUtils & GnuWin32 **: UnxUtils jest zbiorem portów popularnych uniksopodobnych narzędzi GNU do natywnego Win32, z plikami wykonywalnymi zależnymi tylko od Microsoft C-runtime msvcrt.dll. Musisz pobrać część główną i kilka uaktualnień . GnuWin32 ma późniejsze wersje niż UnxUtils, ale wymaga plików pomocniczych (np. DLL)

MSYS & MinGW wydają się mieć być przestarzałe przez MSYS2 & MinGW-W64, więc nigdy na nie nie patrzyłem.

Niektóre wspólne problemy na Cygwin & MSYS2

Odnośnie terminala

Mintty jest terminalem używanym w Cygwin, MSYS2 i ich pochodnych. Należy być świadomym, że jeśli uruchamiasz natywne programy konsolowe, nie jest to bezbolesny zamiennik Windowsowego Wiersza Poleceń. O ile programy z prostym wyjściem tekstowym zazwyczaj działają dobrze, o tyle interaktywne i pełnoekranowe często mają problemy. Przeczytaj więcej na stronie domowej Mintty , a także przeczytaj wpis “Niektóre natywne programy konsolowe nie działają, gdy są uruchamiane z Git Bash” na Git for Windows FAQ . Wpis ten zawiera następujące zalecenia, gdy napotkasz tego typu problemy:

Istnieje kilka metod obejścia tych problemów:

  • Uruchamiaj programy, które mają problemy używając narzędzia winpty . Pozwala to na używanie ładniejszego terminala mintty, ale może stać się nieporęczne, jeśli potrzebujesz tego obejścia dla wielu programów.
  • [użyj cmd.exe] i skonfiguruj go na “Szybką edycję”, rozsądny rozmiar i przewijanie do tyłu oraz odpowiednią czcionkę unicode. Nadal będziesz musiał żyć z innymi dziwactwami [cmd.exe].
  • Zainstaluj i używaj Conemu .

Inne sprawy

Dwie najważniejsze rzeczy, o których należy pamiętać to:

  1. Istnieje kompromis pomiędzy mocą a trudnymi do debugowania problemami. Im potężniejsze rozwiązanie, tym więcej rzeczy może pójść nie tak, nawet w sposób, który początkowo będzie wydawał się niezwiązany z warstwą Linuksa.

  2. Jeśli nie masz dużego doświadczenia z Linuksem, nie używaj potężniejszych rozwiązań, takich jak Cygwin/MSYS2/MinGW

UnxUtils i GnuWin32 mają najmniejszą moc, ale też najmniejszy potencjał powodowania bólu głowy. Cygwin i podobne będą górą zarówno pod względem mocy, jak i bólu głowy. Cmder jest gdzieś pośrodku. Więc Kiedy potrzebujesz najmocniejszych rozwiązań, dobrze się wyśpij i bądź w pełni skoncentrowany. Unikaj używania potężnych rozwiązań podczas testowania czegoś nowego i prawdopodobnie niestabilnego. Nie zapominaj również, że rozwiązania o średniej złożoności takie jak cmder nie są bez skazy.

Problem z komendami linuksowymi podążającymi za komendami windowsowymi jest częstą przyczyną trudnych do debugowania problemów w rozwiązaniach takich jak Cygwin/MSYS2/MinGW. Oto przykład: Miałem plik .bat, który używał polecenia timeout. Po uruchomieniu pod Cygwinem zakończyłby się on niepowodzeniem, ponieważ timeout jest również poleceniem linuksowym, ale o innej składni. Po tym, jak zauważyłem problem, dowiedziałem się, że mogę dodać PATH=… na górze pliku .bat, aby upewnić się, że polecenie windowsowe ma priorytet. Ale wtedy dostałem jeszcze bardziej kryptograficzny “Przekierowanie wejścia nie jest obsługiwane” błąd i zdecydowałem się na obejście zanim znalazłem przyczynę.

Oto przykład problemu z cmderem. Uruchamiałem unison w wersji Windows pod Cmderem i w pewnych szczególnych warunkach zawieszał się z absolutnie żadnym komunikatem o błędzie. To samo polecenie zawsze działało idealnie pod cmd.exe. Zabawne jest to, że działało również doskonale pod Cygwinem (w rzeczywistości, jeśli masz nazwy plików Unicode, terminal Cygwin jest lepszy niż cmd.exe, ponieważ cmd.exe często wyświetla tekst Unicode w sposób zniekształcony).

O tym przewodniku

W latach 2017-05 zachorowałem na niezrozumienie różnic między powyższymi narzędziami, chociaż używałem niektórych z nich od dawna (głównie CygWin i cmder, ale nigdy do celów programistycznych). Więc spędziłem kilka godzin, aby zagłębić się w ten krajobraz. Ten przewodnik jest wynikiem notatek, które prowadziłem. Nie jestem ekspertem w tej dziedzinie, ale bardzo się starałem znaleźć wszystkie istotne informacje, przeczytać je krytycznym okiem i przedstawić najważniejsze części w jasny sposób. Jeśli coś wydaje się nie tak, proszę o komentarz, a postaram się to poprawić.

Na koniec przeprosiny za pewne problemy terminologiczne: W tym tekście czasami używam terminu Linux w miejsce UNIX lub POSIX. Wiem, że to nie to samo, ale bardzo trudno jest je rozróżnić, gdy podchodzi się do tematu z tak dużej odległości. Nawet jeśli nie jest to trudne, zajmuje to czas, którego nie mam ;-)

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

Sugerowałbym pobranie i zainstalowanie minimalnego zestawu MinGW i również minimalnego zestawu MSYS. Instalator MinGW daje ci łatwe GUI do wyboru pakietów, które chcesz zainstalować. Jeśli wszystko co chcesz to BASH, to instalacja nie zajmie więcej niż kilka megabajtów.

UPDATE: Przeniosłem się do MSYS2 który jest o wiele bardziej zaawansowany, i posiada port narzędzia ArchLinux pacman do zarządzania pakietami. Instalator MSYS2 ma wszystko czego potrzebujesz, plus używa mintty który jest absolutnie doskonały .

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

Dostępny jest również Clink na GitHubie . Integruje się on z windowsowym wierszem poleceń za pomocą bibliotek hakowych.

Z opisu projektu:

Clink łączy natywną powłokę Windows cmd.exe z potężnymi funkcjami edycji wiersza poleceń biblioteki GNU Readline, która zapewnia bogate możliwości uzupełniania, historii i edycji wiersza.

(więc nie zapewnia funkcji języka programowania bash-as-a-programming ani żadnych innych uniksowych dobroci)

Używam Linuksa w pracy i czasami zdarza mi się tabulować w cmd, który nie zachowuje się tak, jakbym tego oczekiwał od Basha. Dzięki Clink mogę przezwyciężyć niektóre z tych niedociągnięć.

Ostatnio odkryłem również obiecujący, ale jeszcze nie ‘can-do-all’ projekt o nazwie flinux który emuluje funkcje systemu Linux i dostarcza pewnego rodzaju system na jego szczycie (obecnie oparty na Arch Linux)

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

Oprócz co powiedział faffaffaff , Git dla Windows zawiera Bash i niektóre popularne programy wiersza poleceń Linuksa (np. Vim , sed , i gawk ). Jest on oparty na MSYS . Wersje programów są jednak stare, na przykład Bash jest w wersji 3.1. Cygwin ](http://en.wikipedia.org/wiki/Cygwin) miałby nowsze wersje tych programów.

Używam też ConEmu jako emulatora terminala (głównie do podświetlania składni w Vimie, stron z zakładkami i łatwiejszego kopiowania-wklejania). console2 ](http://sourceforge.net/projects/console/) jest również innym popularnym emulatorem terminala, ale nie próbowałem go.

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

Jest to jedna z pierwszych rzeczy, które robię, gdy konfiguruję nową maszynę z systemem Windows: Funkcjonalna i zgrabna konsola w Windows .

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

Właśnie próbowałem z Babun , który zintegrował Cygwin wewnętrznie, i smakuje mi : )

Plik do pobrania jest trochę duży, około 250 MB. Ale instalacja jest prosta; nie ma potrzeby konfigurowania czegokolwiek i po prostu działa!

Advertisement

Pytania pokrewne

3
6
10
19
3
Advertisement