This is my rifle. There are many like it, but this one is mine. My rifle is my best friend. It is my life. I must master it as I must master my life. […] I will learn its weaknesses, its strength, its parts, its accessories […] We will become part of each other. We will … - The Rifleman’s Creed

Przytoczony powyżej fragment idealnie pasuje nie tylko do strzelców, ale również do programistów. Czyż nie uwielbiamy swoich narzędzi? Bez względu na to czy odniesiemy ten cytat do karabinu, shella, edytora, systemu operacyjnego czy klawiatury, będzie on równie prawdziwy.

Z pewnością wielu z nas pamięta swoje gorące zaangażowanie w dyskusje na temat wyższości jednego narzędzia nad drugim. To emocjonalne poruszenie, gdy ktoś próbuje nam udowodnić, że używany przez nas edytor, shell, język czy system są gorsze niż inne.

Zazwyczaj stając przed wyborem narzędzia określonego typu poświęcamy sporo czasu na poszukiwanie narzędzia idealnego, czytamy różne porównania, szukamy argumentów za i przeciw. Następnie inwestujemy swój czas w naukę i zaczynamy go używać. Być może ten długi i wymagający dużego zaangażowania proces sprawia, że z czasem do danego narzędzia się przywiązujemy i reagujemy emocjonalnie na najmniejsze nawet słowa krytyki skierowane w jego kierunku.

Uważam jednak, że wszelkie święte wojny na temat tego, które narzędzia są lepsze nie mają sensu. Narzędzie jest dobre wtedy, kiedy usprawnia naszą pracę i sprawia, że jesteśmy efektywni. A to czy tak będzie zależy przede wszystkim od naszych indywidualnych preferencji i poziomu opanowania obsługi danego narzędzia.

Dlatego powinniśmy dążyć do perfekcji we władaniu wybranymi przez siebie narzędziami. Powinniśmy poznać ich mocne i słabe strony oraz nauczyć się wykorzystywać pełnię ich możliwości, tak aby minimalizować barierę pomiędzy naszym umysłem a maszyną podczas transferowania do niej zrodzonych w naszych głowach idei i konceptów.

Gain familiarity with the shell, and you’ll find your productivity soaring. - The Pragmatic Programmer

Jednym z najczęściej wykorzystywanych narzędzi w pracy programistycznej jest shell. Korzystamy z niego setki razy dziennie dlatego uważam, że to właśnie jemu powinniśmy poświęcić uwagę w pierwszej kolejności.

Sprawne użycie shell’a pozwala na realizowanie zadań dla których niektórzy niejednokrotnie piszą dedykowane programy, tracąc w ten sposób czas i energię.

Stając przed wyborem alternatywy dla basha rozważałem dwie opcje: fish oraz zsh + Oh My ZSH!. Oba rozwiązania mają ogromne możliwości jeżeli chodzi o usprawnianie pracy w CLI w związku z czym będziecie zadowoleni bez względu na to, które z nich wybierzecie.

Mój wybór padł na fisha. Argumentami, które przyczyniły się do tego, że zacząłem testować go w pierwszej kolejności były:

Zależało mi na tym, żeby móc szybko rozpocząć pracę i przekonać się czy dane rozwiązanie mi odpowiada.

Instalacja Fisha

W przypadku macOS i Homebrew wystarczy wykonać komendę:

$ brew install fish

Instalacja na Ubuntu również odbywa się standardowo:

$ sudo apt-add-repository -yu ppa:fish-shell/release-3
$ sudo apt install -y fish

W przypadku błędu:

-bash: apt-add-repository: command not found

należy doinstalować następujący pakiet:

$ sudo apt install -y software-properties-common

Po pomyślnej instalacji możemy wypróbować nowe narzędzie wpisując w CLI:

$ fish

Możemy również ustawić fisha jako nasz domyślny shell:

$ chsh -s /usr/local/bin/fish

Po ponownym zalogowaniu i otwarciu terminala przywita nas fish.

I must master it as I must master my life

Teraz pozostaje nam tylko używać fisha w codziennej pracy i nabywać biegłości w wykorzystywaniu pełni jego możliwości. Najlepiej zacząć od zapoznania się z tutorialem oraz FAQ na oficjalnej stronie.

Jeżeli chcemy bardzo biegle posługiwać się shellem, sama zmiana na fisha i jego opanowanie nie wystarczy. W celu głębokiego zrozumienia idei i koncepcji kryjących się za unixowymi powłokami warto zapoznać się z takimi źródłami jak Bash Guide for Beginners, GNU Bash manual oraz Advanced Bash-Scripting Guide.

Mimo, że w niektórych aspektach działanie fisha różni się od basha to fundamentalne mechanizmy pozostają takie same w obu rozwiązaniach.

Jeżeli okaże się, że wbudowane funkcje fisha to dla nas za mało warto przyjrzeć się dedykowanym frameworkom i menadżerom pakietów:

Linki