Fish – fajniejszy shell

Jeśli wzdryga Cię na myśl o pisaniu czegoś w konsoli, bo lubisz klikać lub chciałbyś usprawnić swoją pracę w bashu – spróbuj powłoki fish.

Jest to dość świeży projekt, dostępny w większości dystrybucji. Aby zainstalować ten interpreter wpisz (w Ubuntu):

apt install fish

Można też pobrać wersję dla Mac OS.

Co to daje?

Jeśli nie masz zwyczaju pisać pętli i funkcji w terminalu, to początki będą takie same jak w bashu. Po prostu możesz przejść do katalogu, czytać pliki, przekierowywać strumienie danych (tak, |, < i > działają tak samo) i ogólnie pracować jak dawniej.

Jednak po dłuższym czasie fish uczy się co i gdzie robiłeś. Ja na przykład często w ostatnim czasie pracuję nad biblioteką dinemic. Stąd też, gdy zaczynam pracę w katalogu domowym, po wpisaniu cd fish automatycznie podpowiada:

Po wciśnięciu strzałki w prawo automatycznie uzupełni się pełna ścieżka. Mała rzecz, a przydatna. Nieco większym ułatwieniem jest wyszukiwanie w historii. W Bashu trzeba było przebrnąć się przez kilkakrotne wciśnięcie Ctrl+R aby przeglądnąć kilka poleceń wstecz. W Fishu, jeśli wpisywałeś podobne polecenie wcześniej albo dostaniesz gotową podpowiedź jak powyżej, albo strzałką w górę będziesz mógł przeglądnąć poprzednie wywołania, włącznie z tymi, które zawierają dany ciąg znaków, który wpisałeś (poniżej checkout):

Przy okazji ładnie podświetlane jest samo polecenie, jego parametry i szukany string.

No dobra, co jeszcze możemy zrobić? Skoro już jesteśmy w wybranym katalogu, w gałęzi master, to zróbmy merge! Po wpisaniu git merge fish podpowiada tak jak poprzednio ostatnie polecenie:

Chcemy jednak zrobić merge innej gałęzi. Wciśnij raz tab. Fish wyświetli jakie masz dostępne gałęzie, które możesz zmergować do tej, na której aktualnie jesteś:

a jeśli chcesz coś więcej, to możesz wyświetlić też samą pomoc do gita, wciskając tab po poleceniu:

można w tym trybie przechodzić strzałkami pomiędzy poszczególnymi poleceniami i wybrać enterem to, którego szukasz:

Na pierwszy rzut oka może to się wydawać zbędnym bajerem (no bo przecież każdy szanujący się Linuksiarz zna wszystkie polecenia 😉 ), ale czasami trafi się na to jedno, którego nie znamy i nie trzeba sięgać do manuala.

Podobna pomoc jest też do całej masy innych poleceń, m.in. find, grep, /bin/true i innych. Podobnie jak w cd możemy też je filtrować wpisując pierwsze litery.

Fajne ścieżki i uzupełnianie z historii

No ok, podpowiedziało w katalogu C++/libdinemic co ostatnio robiłem. Wpisując tam np. rm fish podpowie, że pewnie znowu chcę usunąć pliki *.o. Natomiast po wejściu do innego katalogu, C++/netdinemic fish pamięta, że tam za pomocą rm usuwałem ostatnio co innego – katalog /tmp/dinemic_keys. Mała rzecz, a wciskając strzałkę w prawo na klawiaturze można wykonać ostatnie akcje w kontekście danego katalogu, w którym jesteśmy.

Z innych rzeczy, warto spróbować podpowiadania (tab) np. w poleceniu ssh albo scp. Fish potrafi podpowiedzieć ostatnio używane hosty:

Podobnie jak w bashu, działa Ctrl + U (usunięcie linijki i zapisanie jej w schowku) i wklejenie ze schowka przez Ctrl + Y. Ctrl+W (kasowanie ostatniego słowa) działa tu na ścieżkach co / i na kreskach, a nie tylko na spacjach.

Czym się różni od basha?

Po za całym podpowiadaniem, nieco inaczej wyglądają funkcje i zmienne. Zamiast export trzeba używać set. Zamiast $0 mamy $status. Różnic jest dość dużo i chcąc używać czegoś bardziej zaawansowanego trzeba już przejść przez manuala.

Leave a Reply