Blog (1)
Komentarze (91)
Recenzje (0)
@robert-kmO rybce w powłoce

O rybce w powłoce

14.04.2014 02:37

Jako, że jest to mój pierwszy wpis na blogu, chciałbym staropolskim zwyczajem powiedzieć coś o sobie. Od prawie dziesięciu lat jestem użytkownikiem Linuxa, więc jeżeli będę coś pisał na tym blogu, to na pewno będzie dotyczył on tego zagadnienia. Przez 4 lata swojego życia pracowałem jako administrator wszelkich linuksów i uniksów, aby wreszcie zostać programistą embedded linux.

W związku z powyższym pracowałem na wielu różnych systemach, w różnych środowiskach itp. Liczę na to, że znajdą się osoby, które skorzystają na moim doświadczeniu, a dodadzą coś od siebie w komentarzach, abym i ja mógł nauczyć się czegoś nowego.

Fish - podstawy

Dzisiaj chciałbym wypowiedzieć się trochę o fishu czyli nowej powłoce systemowej dostępnej na systemy rodziny linux.

Jak to się wszystko zaczęło?

Pewnego razu stwierdziłem, że moje sposoby interakcji z systemem trochę rdzewiały, więc postanowiłem poszukać nowego emulatora terminala. Wiem, że istnieją takie, które pozwalają wyświetlać obrazki w oknie (terminology ), takie, które obsługuje się myszką (finalterm ) itp. Jednak to nadal nie było to, czego szukałem. W jednym z komentarzy na G+ ktoś polecił fisha. Z początku byłem sceptycznie nastawiony do pomysłu zmiany powłoki, gdyż nie wyobrażałem sobie w jaki sposób nowa powłoka może rozszerzyć jeszcze bardziej niż bash sposób interakcji z systemem (to było zaraz po wprowadzeniu autocompletions do basha).

Instalacja

Instalacja jest bardzo prosta. Sprowadza się do wywołania kilku standardowych poleceń. Fish powinien być już dostępny w repozytoriach większości dystrybucji, ale zawsze możemy zainstalować bezpośrednio ze źródeł:


git clone git://github.com/fish-shell/fish-shell.git
cd fish-shell
./configure
make
sudo make install

Teraz możemy albo ustawić tą powłokę na stałe:


chsh -s /usr/local/bin/fish

albo jednorazowo uruchomić poprzez wywołanie polecenia fish.

Konfiguracja

Pierwszą rzeczą którą należy zrobić po uruchomieniu jest skonfigurowanie automatycznych podpowiedzi. Jest to bardzo prosta czynność, gdyż sprowadza się do uruchomienia skryptu fish_update_completions.

Teraz możemy cieszyć się już fishem w pełnej okazałości.

Czy to wszystko? Oczywiście, że nie.

Teraz możemy przystąpić do konfiguracji zmiennych środowiskowych, kolorów, promptów itp. W przypadku basha edytujemy w tym celu pliki /etc/profile lub ~/.bashrc. Fish jednak pozwala na konfigurację poprzez przeglądarkę. Jedyne co należy zrobić, to wywołać fish_config. W przeglądarce otworzy się nowa karta z ustawieniami

Funkcja wyświetlająca godzine z prawej strony terminala
Funkcja wyświetlająca godzine z prawej strony terminala

gdzie, jak widać, możemy ustawić zarówno kolory terminala (ja używam domyślnych), wybrać "zachętę" z predefiniowanych lub utworzyć swoją własną, ustawić zmienne środowiskowe, przejrzeć/usunąć historię itp.

Korzyści

No dobrze, zainstalowaliśmy program, skonfigurowaliśmy, ale co z tego mamy? A no bardzo wiele już na samym początku. Potęgę doceniamy dopiero, gdy posiadamy sporą historię wprowadzonych poleceń.

Tab

Jak już wspomniałem, polecenie fish_update_completions tworzy bazę danych autodopowiadania na podstawie manuali (Man pages). Czyli to, co zostało niedawno wprowadzone w bashu na zasadzie pisania plików konfiguracyjnych (/etc/bash_autocompletion) dostajemy za darmo i z automatu (a to oznacza mniej błędów). W praktyce działa to tak, że otrzymujemy również opis każdego z parametrów. Dla przykładu, oto co się wyświetla po wpisaniu git i naciśnięciu tab:


desktop:fish_test$ git 
add                                   (Add file contents to the index)
apply           (Apply a patch on a git index file and a working tree)
archive                 (Create an archive of files from a named tree)
bisect        (Find the change that introduced a bug by binary search)
…and 30 more rows

W związku z tym, mamy ogólny pogląd na to, jakiej klasy parametr powinniśmy teraz wpisać. Ale załóżmy, że chcemy utworzyć patch, ale zapomnieliśmy jak dokładnie nazywa się parametr. Naciskamy jeszcze raz TAB. Tym razem otrzymujemy znacznie większą listę parametrów polecenia git. Jest ich całkiem sporo, więc ciężko byłoby wyszukać jak dokładnie nazywa się ten parametr. Możemy nacisnąć tab jeszcze raz i przechodzimy do wyboru polecenia. Możemy przeklikać się tabem, aż znajdziemy szukaną funkcję, albo po prostu zacząć pisać o co nam chodzi. Po wpisaniu z klawiatury patch zostają nam już tylko 2 parametry bardzo blisko związane z patchami:


desktop:fish_test$ git apply
search: patch
apply  (Apply a patch on a git index file and a working tree)
format-patch         (Generate patch series to send upstream)

Jak widać wyszukiwanie oprócz wyświetlenia funkcji, zawierającej słowo patch pokazało także git apply, które w opisie także zawiera słowo patch.

Ctrl+f / Strzałka w prawo

Po pewnym czasie zauważymy, że fish zaraz za kursorem wyświetla podpowiedź tego, o co w danej chwili może nam chodzić.

Przykładowo, jeżeli ostatnio funkcja, która poprzednio zaczynała się od słowa git posiadała wspomniane wcześniej format-patch, po wpisaniu kilku pierwszych liter polecenia powłoka zrozumie, że prawdopodobnie chcemy zrobić to samo i zaproponuje dokończenie za nas polecenia jako git format-patch, natomiast jeżeli chcielibyśmy zamiast tego wywołać polecenie git apply 0001-super-extra-feature.patch, a już je kiedyś wpisywaliśmy, to wystarczy wpisać git a, a fish zaproponuje resztę automatycznie, aby wybrać tę propozycję wystarczy kliknąć ctrl+f (preferuję ten sposób) lub strzałkę w prawo.

Strzałka w górę

W bashu posiadamy historię poleceń dostępną poprzez ctrl+r. Oczywiście dotychczasowe polecenie zanika i musimy często wpisywać coś od początku, gdy w trakcie wpisywania zorientowaliśmy się, że nie pamiętamy co było pod koniec polecenia. W przypadku fisha sprawa jest oczywiście łatwiejsza. Wystarczy w trakcie wpisywania polecenia użyć strzałki do góry (później można przeszukiwać historię w drugą stronę przy pomocy strzałki w dół).

Historia - w bashu do ustawienia (standardowo jest ustawiona na 100 poleceń, przez co jest bezużyteczna, bo 100 poleceń wpisuje się w 15 minut pracy na systemie), w fishu jest nieskończona (w tym momencie mam około 7000 poleceń).

Alt + strzałka w górę

Załóżmy taką sytuację: chcemy przenieść plik "0037_feature.patch" do katalogu ../new_dir, a następnie w tym katalogu edytować ten plik. W bashu robimy to poprzez


mv 0037_feature.patch ../new_dir
cd $_
vim 0037_feature.patch

Po pierwsze, $_ jest nieintuicyjne (ostatni parametr poprzedniego polecenia). Po drugie, gdy już przejdziemy do katalgu, musimy wpisać pełną nazwę pliku, który zazwyczaj nie jest jakoś specjalnie unikalny (w tym przypadku musiałbym wpisać na pewno 0037, a następnie nacisnąć tab. Sytuacja może się bardzo komplikować w przypadku innych plików. W fishu, wystarczy przy wciśniętym klawiszu alt, przesuwać się strzałkami góra/dół w historii wpisywanych parametrów.

Ctrl+c

Ctrl+c w bashu powoduje wypisanie znaku ^C w poprzedniej linii i ponowne wypisanie znaku zachęty. W fishu powoduje wyczyszczenie aktualnie wpisanego polecenia i nic więcej. Drobna estetyczna sprawa, a cieszy.

Kolory

Dzięki fish już w trakcie pisania polecenia wiemy, czy ono się wykona, czy nie. Dla przykładu przy próbie wpisania polecenia, które nie znajduje się w ścieżkach systemowych, polecenie kolorowane jest na czerwono (domyślne ustawienia), aż do momentu, aż fish nie uzna go jako działające (np. samo c będzie czerwone, cd już niebieskie).

Skrypty

Fish upraszcza także pisanie skryptów, czy nie fajnie jest sprawdzać wynik ostatniego polecenia poprez $status niż poprzez $? ?. Dodatkowo, gdy chcemy wyświetlić wartość jakiegoś parametru na L w bashu wpisujemy całe polecenie echo. W fishu wystarczy wpisać echo $l i kliknąć tab, a w autopodpowiedziach zobaczymy już wartości.

Wielkie/małe litery

W przypadku, gdy nazwa katalogu wygląda w ten sposób: SnEDfGhtHFG, w bashu musimy szczególną uwagę zwracać na wielkość litery, aby autouzupełnianie działało. W fishu nie musimy się tym martwić.

Inne klawisze

Do powłoki możemy przypisać skróty klawiaturowe, ale ja się tym nie bawiłem, więc ciężko mi coś sensownego w tym temacie powiedzieć.

Zakończenie

Mam nadzieję, że zachęcę niektórych do korzystania z tego programu, a przy okazji ktoś podzieli się ciekawym configiem lub czymś podobnym.

P.S.

Wpis publikowany o późnej godzinie, więc zastrzegam sobie prawo do edycji wpisu.

P.S.2

Obrazków więcej nie będzie :)

Wybrane dla Ciebie
Komentarze (37)