Polecenia w PowerShell Core zupełnie jak linuksowym terminalu? To już możliwe

Maciej Olanicki , 28.09.2019 r.
terminal

Na blogu deweloperskim Microsoftu ukazał się w ostatnim czasie interesujący wpis Mike’a Battisty, Senior Program Managera w Microsofcie. Mike przedstawił sposób na to, jak sprawić, by obsługa Windows Subsystem for Linux była – przynajmniej pod względem składni poleceń – równie wygodna i naturalna, jak w natywnym linuksowym terminalu. Efekty jego pracy może już przetestować każdy, po pobraniu niezbędnych plików z repozytorium GitHub.

Windows Subsytem for Linux

Windows Subsystem for Linux to jeden z najciekawszych składników systemu operacyjnego Microsoftu kierowanych do deweloperów czy administratorów. Choć z początku pierwsza wersja była znacznie ograniczona w stosunku do natywnego środowiska linuksowego i brakowało jej wielu narzędzi deweloperskich, to kolejne miesiące rozwoju Windowsa 10 przyniosły niezłe rezultaty na drodze rozwoju warstwy tłumaczącej wywołania systemowe i integracji z dystrybucjami.

Dość niespodziewanie Microsoft zdecydował się jednak na równoległe rozwijanie dwóch wersji WSL-a. Jak wspomnieliśmy, pierwsza opierała się na tłumaczeniu wywołań systemowych, co miało swoje ograniczenia, ale też sprawiało, że WSL uruchamiał się błyskawicznie i miał relatywnie niewielki narzut na sprzęt. W wersji drugiej jednak zdecydowano się na implementację pełnego jądra Linux odpowiednio zmodyfikowanego przez Microsoft i rozwiązanie oparte na wirtualizacji z wykorzystaniem hipernadzorcy Hyper-V.

Choć WSL 2 wypadł w testach wydajnościowych Michaela Larabela zauważalnie słabiej niż pierwsza wersja, to jednak wirtualizacja uruchomiła przed deweloperami i producentami oprogramowania zupełnie nowe możliwości. Najlepszym przykładem będzie tu Docker. Gruntowne zmiany w architekturze zachęciły producenta do całkowitego porzucenia dotychczasowej wersji na Windowsa. Zdecydował on, że jedyną oficjalnie wspieraną będzie właśnie Docker dla Windows Subsystem for Linux 2.

Linuksowe polecenia w PowerShell

Dotąd jednak użytkownicy linuksowego subsystemu napotykali drobną, acz irytującą niedogodność, która każdorazowo przypominała im, że nie mają do czynienia z „prawdziwym” Linuksem, lecz z jego microsoftową implementacją w Windowsie. Chodzi o konieczność poprzedzania poleceń prefiksem wsl. To właśnie na ten temat pisze Mike Battista i prezentuje sposób, aby się go pozbyć. Słowem – w PowerShell Core można już wprowadzać polecenia zupełnie jak w linuksowym terminalu.

Udało się to z wykorzystaniem odpowiednich funkcje opakowujące, które są generowane dla każdego polecenia oddzielnie na bazie zdefiniowanej wcześniej listy $command i polecenia Invoke-Expression. Odpowiednie ścieżki rozpoznawane są dzięki poleceniom Split-PathTest-Path i automatycznie tłumaczone na ścieżki WSL. W ten sposób całkowicie wyeliminowana została konieczność stosowania prefiksu wsl w składni.

Aby przetestować proponowaną przez Microsoft nowość, wystarczy pobrać z GitHuba odpowiednio przygotowany profil i dokonać importu. Co ważne, nie jest obsługiwana standardowa wersja powłoki PowerShell, pominąć konieczność korzystania z wsl można wyłącznie w PowerShellu Core. Więcej informacji na temat możliwości edytowania listy poleceń oraz wprowadzania własnych parametrów można zdobyć na łamach bloga deweloperskiego Microsoftu.

Najnowsze oferty pracy:

Polecane wpisy na blogu IT: