Fish Shell zamiast bash dla macOS
Od kilku dni wykonywałem syzyfową pracę za pomocą programu ImageOptim i Findera. Wiedziałem, że muszę to sobie zautomatyzować, ale nie miałem na to czasu, więc w wolnych chwilach brałem kilkaset plików, wrzucałem do ImageOptim i czekałem aż się skompresują. Dzisiaj w końcu sobie to zautomatyzowałem pisząc skrypt, który wszystko zrobi za mnie, ale żeby nie było za łatwo, to postanowiłem podmienić sobie basha na fish.
Dlaczego fish? Bo naukę basha zacząłem prawdopodobnie 23 lata temu i nigdy za nim nie przepadałem. Poza tym nie wykorzystywałem go do pisania skryptów od przynajmniej 15 lat, więc i tak musiałbym przypomnieć sobie składnię. Stwierdziłem więc, że przejdę na nowocześniejszego fisha, przy okazji zaczynając naukę „od nowa”.
Bash jest domyślnym shellem pod macOS, a fisha trzeba doinstalować. Można to zrobić na kilka sposobów – za pomocą Homebrew, MacPorts lub ręcznie. Brew miałem już na komputerze z innych powodów, więc skorzystałem z tej metody. Wszystkie są opisane tutaj.
Najpierw instalacja Homebrew
Jeśli nie macie Homebrew, to należy go zainstalować następującą komendą, wpisywaną w Terminalu:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Jeśli już macie, to uruchomcie Terminal i upewnijcie się, że wszystko gra…
brew doctor
A potem…
brew update
Instalujemy Fish
Jeśli już macie Homebrew, to czas na instalację fisha… W Terminalu wpisujemy…
brew install fish
Po jego zainstalowaniu, które może chwilę zająć, trzeba będzie jeszcze zmienić basha z domyślnego shella na fisha. Pierwszym krokiem będzie edycja pliku /etc/shells
, aby dodać do niego fisha. Ja w tym celu używam BBEdit, ale każdy edytor tekstu powinien się nadawać. Do edycji tego pliku będzie potrzebne hasła administratora. Domyślnie wygląda on tak:
# List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh
Na dole trzeba dodać jedną linię tekstu…
# List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh /usr/local/bin/fish
… aby system wiedział o istnieniu fisha. Teraz pozostaje już tylko zmienić basha na fisha następującą komendą.
chsh -s /usr/local/bin/fish
Jeśli teraz zamkniecie okno Terminala i otworzycie nowe, to uruchomi się już fish, a nie bash.
W następnej części opiszę swój fish-owy skrypt…
★ fish shell →
Komentarze: 9
Ciekawe, ale wolę chyba i tak zsh + oh-my-zsh jako shell.
+ zsh-autosuggestions
+ zsh-syntax-highlighting
ZSH używam praktycznie od zawsze (jeszcze za czasów linuksowych). Muszę jednak przyznać, że zawsze patrzałem na Fisha jako godnego konkurenta dla ZSH.
@Moridin:disqus: Czekam na dalszy tekst; jak dokładnie wygląda sprawa z tymi skryptami? Czy tak napisany skrypt w Fishu jestem w stanie wykorzystać np. do crona?
Jesteś, niezależnie od shella.
@matipl:disqus @disqus_xuANHLc7JB:disqus A dlaczego zdecydowaliście się na ZSH?
1. (Istotne dla mnie): jeżeli wklepiesz w terminalu na Maku `bash –version` dostaniesz info, że jest to wersja z 2007 oznaczona jako 3.2.57(1). Można naturalnie zrobić upgrade za pomocą wspomnianego przez Ciebie Homebrew (do wersji 4.4.12 ze stycznia 2017). Natomiast jeżeli chodzi o ZSH to jest on na Maku w miarę aktualny (5.2 vs 5.3.1).
2. Aliasy globalne np. `alias -g G=’ | grep -i’`. Wpisujesz wtedy `cat plik.txt G szukana_fraza` (ZSH potraktuje to jak: `cat plik.txt | grep -i szukana_fraza`).
3. Lepsze “podpowiadanie” przy użyciu cd. Lepsze uzupełnianie TABem: wpisując np. `cd /u/l/b` i naciskając TAB otrzymasz `cd /usr/local/bin`.
4. Zamienianie ścieżek: jeżeli się pomyliłeś i chcesz np. dotrzeć do katalogu `share` zamiast `bin` wpisujesz po prostu `cd bin share` i zostajesz przeniesiony do `/usr/local/share`. Bardzo pomocna opcja (przykład trochę słaby, bo ścieżka jest krótka i łatwo taki błąd naprawić, ale rozumiesz o co chodzi).
5. Uzupełnianie dla git.
6. Korekta pisowni.
I sporo więcej. Nie jestem też teraz w stanie powiedzieć, czy coś z powyższej listy nie jest zasługą https://github.com/robbyrussell/oh-my-zsh . Jest też sporo wtyczek rozszerzających funkcjonalność (choćby te wspomniane przeze mnie wyżej). Uważam, że ZSH jest zdecydowanie lepszy od Basha. A w każdym bądź razie ZSH jest na pewno lepszą opcją na Maku niż przestarzały Bash. Nie wiem, jak ma się to do Fisha, będę musiał się przyjrzeć tej powłoce, jak znajdę chwilkę :).
Dzięki – właśnie takiej odpowiedzi się spodziewałem. 🙂
Shella można jeszcze zmienić po instalacji w taki sposób. To pozwala mi na trzymanie shella w terminalu innego, a w WebStormie jeszcze innego. https://uploads.disquscdn.com/images/74c4404f92a33e09d53e7007481673c4f882a02d8f43156e6b90879d79036de7.png
Yep.
fish
jest zajebisty ! korzystam od dawna !