<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Maciej[cc] &#187; bash</title><atom:link href="https://nabozny.io/tag/bash/index.xml" rel="self" type="application/rss+xml"/><link>https://nabozny.io/tag/bash/</link><description>Blog o programowaniu i nie tylko</description><lastBuildDate>Thu, 11 Oct 2018 21:22:02 +0000</lastBuildDate><language>pl-PL</language><generator>Hugo 0.167.0</generator><item><title>Fish – fajniejszy shell</title><link>https://nabozny.io/fish-fajniejszy-shell/</link><dc:creator>maciej</dc:creator><pubDate>Thu, 11 Oct 2018 21:22:02 +0000</pubDate><category>Linux</category><category>linux</category><category>bash</category><guid isPermaLink="true">https://nabozny.io/fish-fajniejszy-shell/</guid><description>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.</description><content:encoded>&lt;p&gt;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.&lt;/p&gt;&#10;&lt;p&gt;Jest to dość świeży projekt, dostępny w większości dystrybucji. Aby zainstalować ten interpreter wpisz (w Ubuntu):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;apt install fish&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Można też pobrać wersję dla Mac OS.&lt;/p&gt;&#10;&lt;h5 id="co-to-daje"&gt;Co to daje?&lt;/h5&gt;&#10;&lt;p&gt;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, |, &amp;lt; i &amp;gt; działają tak samo) i ogólnie pracować jak dawniej.&lt;/p&gt;&#10;&lt;p&gt;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 &lt;em&gt;cd&lt;/em&gt; fish automatycznie podpowiada:&lt;br&gt;&#10;&lt;img src="https://nabozny.io/uploads/2018/10/Zrzut-ekranu-2018-10-11-o-23.00.14.png" alt="" width="338" height="26" class="alignnone size-full" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;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 &lt;em&gt;checkout&lt;/em&gt;):&lt;br&gt;&#10;&lt;img src="https://nabozny.io/uploads/2018/10/Zrzut-ekranu-2018-10-11-o-23.03.39.png" alt="" width="445" height="44" class="alignnone size-full" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Przy okazji ładnie podświetlane jest samo polecenie, jego parametry i szukany string.&lt;/p&gt;&#10;&lt;p&gt;No dobra, co jeszcze możemy zrobić? Skoro już jesteśmy w wybranym katalogu, w gałęzi master, to zróbmy merge! Po wpisaniu &lt;em&gt;git merge&lt;/em&gt; fish podpowiada tak jak poprzednio ostatnie polecenie:&lt;br&gt;&#10;&lt;img src="https://nabozny.io/uploads/2018/10/Zrzut-ekranu-2018-10-11-o-23.06.06.png" alt="" width="417" height="43" class="alignnone size-full" loading="lazy" decoding="async"&gt;&lt;br&gt;&#10;Chcemy jednak zrobić merge innej gałęzi. Wciśnij raz &lt;em&gt;tab&lt;/em&gt;. Fish wyświetli jakie masz dostępne gałęzie, które możesz zmergować do tej, na której aktualnie jesteś:&lt;br&gt;&#10;&lt;img src="https://nabozny.io/uploads/2018/10/Zrzut-ekranu-2018-10-11-o-23.07.28.png" alt="" width="615" height="76" class="alignnone size-full" loading="lazy" decoding="async"&gt;&lt;br&gt;&#10;a jeśli chcesz coś więcej, to możesz wyświetlić też samą pomoc do gita, wciskając &lt;em&gt;tab&lt;/em&gt; po poleceniu:&lt;br&gt;&#10;&lt;img src="https://nabozny.io/uploads/2018/10/Zrzut-ekranu-2018-10-11-o-23.08.34.png" alt="" width="509" height="139" class="alignnone size-full" loading="lazy" decoding="async"&gt;&lt;br&gt;&#10;można w tym trybie przechodzić strzałkami pomiędzy poszczególnymi poleceniami i wybrać enterem to, którego szukasz:&lt;br&gt;&#10;&lt;img src="https://nabozny.io/uploads/2018/10/Zrzut-ekranu-2018-10-11-o-23.09.17.png" alt="" width="517" height="511" class="alignnone size-full" loading="lazy" decoding="async"&gt;&lt;br&gt;&#10;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.&lt;/p&gt;&#10;&lt;p&gt;Podobna pomoc jest też do całej masy innych poleceń, m.in. find, grep, /bin/true i innych. Podobnie jak w &lt;em&gt;cd&lt;/em&gt; możemy też je filtrować wpisując pierwsze litery.&lt;/p&gt;&#10;&lt;h5 id="fajne-ścieżki-i-uzupełnianie-z-historii"&gt;Fajne ścieżki i uzupełnianie z historii&lt;/h5&gt;&#10;&lt;p&gt;No ok, podpowiedziało w katalogu C++/libdinemic co ostatnio robiłem. Wpisując tam np. &lt;em&gt;rm&lt;/em&gt; fish podpowie, że pewnie znowu chcę usunąć pliki &lt;em&gt;*.o&lt;/em&gt;. Natomiast po wejściu do innego katalogu, C++/netdinemic fish pamięta, że tam za pomocą &lt;em&gt;rm&lt;/em&gt; 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.&lt;/p&gt;&#10;&lt;p&gt;Z innych rzeczy, warto spróbować podpowiadania (tab) np. w poleceniu ssh albo scp. Fish potrafi podpowiedzieć ostatnio używane hosty:&lt;br&gt;&#10;&lt;img src="https://nabozny.io/uploads/2018/10/Zrzut-ekranu-2018-10-11-o-23.19.09.png" srcset="https://nabozny.io/uploads/2018/10/Zrzut-ekranu-2018-10-11-o-23.19.09_hu_38347d7295265613.png 600w, https://nabozny.io/uploads/2018/10/Zrzut-ekranu-2018-10-11-o-23.19.09.png 923w" sizes="(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" alt="" width="923" height="112" class="alignnone size-full" loading="lazy" decoding="async"&gt;&lt;br&gt;&#10;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.&lt;/p&gt;&#10;&lt;h5 id="czym-się-różni-od-basha"&gt;Czym się różni od basha?&lt;/h5&gt;&#10;&lt;p&gt;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.&lt;/p&gt;</content:encoded></item></channel></rss>