Wyszukiwanie w witrynie

Te 7 trików Bash zmieni sposób, w jaki używasz terminala


Czy spędzasz większość czasu w terminalu, czy starasz się czegoś nauczyć? Bash jest bardzo rozwinięty i zawiera wiele ukrytych funkcji. Dziś mam siedem sztuczek wiersza poleceń, które zaoszczędzą Ci czas na pisaniu i edycji.

Większość tych sztuczek wykorzystuje rozwijanie historii w Bashu. Prawdopodobnie znasz jego najbardziej podstawową składnię — !! — która ponownie wykonuje poprzednie polecenie, ale tutaj jest więcej do omówienia, a rozwijanie historii jest trochę bardziej złożone. Możemy używać rozwinięć, aby wybrać polecenie, zmodyfikować je, a następnie ponownie wykonać.

Rozszerzenia historii Basha składają się z trzech segmentów, a to, co widziałeś ("!!"), stanowi pierwszy segment, zwany oznacznikiem zdarzenia. Są jeszcze dwa segmenty zwane "oznacznikiem słowa" i (opcjonalnie) "modyfikatorem." Łączymy je w ten sposób:

event-designator[:word-designator[:modifiers]]

Łatwiej jest przeczytać przykład z prawdziwego świata:

!!:2:p  # You can use multiple modifiers, like :p:h.
  1. Oznaczenie zdarzenia (np. drugi "!" w "!!"): Określa, które polecenie w historii ma być celem.
  2. Wyznacznik słowa (np. „2”): Określa, które słowa (argumenty polecenia) mają zostać wybrane. Słowa są zazwyczaj oddzielone spacjami lub otoczone cudzysłowami. Słowo zero to nazwa polecenia.
  3. Modyfikator (np. "p"): Opcjonalnie określa, co zrobić z wybranym słowem.

Mówiąc ogólnie, wybierz polecenie, określ słowo, a następnie opcjonalnie je zmodyfikuj. „!!:2:p” wybiera poprzednie polecenie („!!”), drugi argument („2”) i je wypisuje („p”).

Pierwszy "!" aktywuje rozwinięcie historii w Bashu, a wyrażenie, które następuje (np. kolejne "!"), jest wskaźnikiem zdarzenia. Ta wartość decyduje, które polecenie wybierzesz. Jedynym wyjątkiem od prefiksu "!" jest "^", który aktywuje zamianę ciągu (omówioną później).

Oficjalna dokumentacja zawiera listy opisujące wszystkie możliwe kombinacje. Na początku trudno dostrzec ich wartość, ale gdy znajdziesz kilka przydatnych sztuczek i zrozumiesz, jak je tworzyć, będziesz ich intuicyjnie używać bez myślenia. Poniżej mam kilka sztuczek, które okazały się przydatne przez lata.

Ponownie użyj wszystkich argumentów

Różne polecenia mogą czasami używać tych samych argumentów

Są sytuacje, w których trzeba zastosować identyczne argumenty do wielu poleceń. Weźmy następujący przykład:

touch foo bar
chmod 644 foo bar

Byłoby miło, gdybyśmy mogli ponownie użyć argumentów — „foo” i „bar” — i możemy:

touch foo bar
chmod 644 !!:*

Mówi: „Wybierz poprzednie polecenie („!!”) i użyj ponownie wszystkich jego argumentów („*”). To tak, jakby wykonać chmod 644 foo bar.”

Jednak Bash pozwala nam skrócić to jeszcze bardziej, pomijając „!:” w przypadku projektantów słów opartych na symbolach („*”, „^”, „$” i „%”). Na przykład:

touch foo bar
chmod 644 !*

"!*" jest tym samym co "!!:*."

Użyj ponownie n-tego argumentu

Niektóre argumenty są zbyt trudne do przepisania

Podobnie jak w poprzednim rozwinięciu, możemy wybrać konkretne argumenty z polecenia:

touch foo bar
chmod 644 !!:2  # Select the second word of the previous command.

To jest to samo co:

chmod 644 bar

Aby trochę rozwinąć temat nazw zdarzeń, wybierzmy inne polecenie:

Wyznacznik zdarzenia (np. drugie „!” w „!!”) to sposób, w jaki wybieramy polecenie.

touch foo bar
ls
chmod 644 !-2:2  # Select the command two places behind ("-2"), and choose the second ("2") word ("bar").

"!" aktywuje rozszerzanie historii, a "-2" wybiera polecenie dwa miejsca wstecz w Twojej historii. W porównaniu, "!!" jest skrótem od "!-1" (poprzednie polecenie).

Oznaczniki zdarzeń są elastyczne i prawdopodobnie używałeś ich wcześniej, gdy ponownie wykonywałeś polecenie z historii, np. !100.

Użyj ponownie nazwy polecenia

Jest przydatne, gdy zostanie utrwalone w pniu mózgu

Wpisywanie nazwy polecenia jest proste, więc możesz się zastanawiać, czy ten trik jest warty wysiłku. Cóż, wpisanie „!:0” jest jeszcze łatwiejsze, a gdy już nabierzesz nawyku robienia tego, robisz to bez zastanowienia (tak jak !!):

touch foo bar
!:0 baz

To jest to samo, co touch baz.

  • "!": Aktywuje rozwijanie historii.
  • "0": Wybierz tylko nazwę polecenia.

Wyłączenie oznacznika zdarzenia (znaku po pierwszym „!”) implikuje poprzednie polecenie.

Możesz wybrać dowolne polecenie, określając numer jako wskazanie zdarzenia:

!100:0 baz

Jednak w takim przypadku prawdopodobnie łatwiej jest po prostu wpisać polecenie.

Popraw literówkę

Ponieważ ręczne poprawianie błędów jest uciążliwe

Byłoby głupio z mojej strony pytać, czy kiedykolwiek źle wpisałeś polecenie — oczywiście, że tak. Jednak prawdopodobnie nadwyrężyłeś swoje palce i energię psychiczną, naprawiając je — próbując przesunąć kursor we właściwe miejsce i poprawiając polecenia. Istnieje łatwiejsze rozwiązanie: zamiana ciągów znaków.

ehco foo bar
^ehco^echo

To prosta zamiana tekstu, i możesz zmienić dowolną część polecenia:

echo "Any part of the cmd."
^cmd^command

Jeśli znasz się na sed, poprzednie rozwinięcie jest takie samo jak następujące:

echo "Any part of the cmd."
!!:s/cmd/command/

Użyj ponownie pierwszego lub ostatniego argumentu

To wygodniejsze niż określanie numerów argumentów

Widzieliśmy, jak ponownie używać wszystkich argumentów z wpisu historii (np. „!*”), ale możemy konkretnie wybrać pierwszy lub ostatni argument.

Wybierz pierwszy argument:

touch foo bar
chmod 644 !^

To to samo, co wykonanie chmod 644 foo, a „!^” jest równoważne !!:1 (poprzednie polecenie; pierwszy argument.)

Wybierz ostatni argument:

touch foo bar
chmod 644 !$

To jest to samo co chmod 644 bar.

"$" jest szczególnie przydatny, jeśli nie znasz liczby argumentów.

Jeśli znasz regex, będziesz już zaznajomiony z "^" i "$", które oznaczają początek i koniec linii. To wygodny sposób na ich zapamiętanie.

Rozwiń przed przesłaniem

Sprawdź polecenie przed jego wykonaniem

Wszystkie te rozszerzenia mogą być nieco mylące, chyba że ugruntujesz je, oglądając prawdziwe (rozszerzone) polecenia — w ten sposób możesz zobaczyć, co one faktycznie robią.

Aby to zrobić, wpisz swoje rozwinięcie i naciśnij Ctrl+Alt+E:

touch foo bar
chmod 644 !$ <Ctrl+Alt+E>

To rozwinie wyrażenie do wartości dosłownych bez wykonywania polecenia. Teraz możesz zobaczyć, co robi, zanim zostanie wykonane.

Przejdź na początek lub koniec wiersza poleceń

Poruszanie się jest trudne, a skróty to ułatwiają

Poruszanie się po wierszu poleceń nie jest oczywiste dla początkujących, ale Bash oferuje kilka skrótów, które mogą w tym pomóc. Dwa z nich przeniosą cię na początek lub koniec linii, odpowiednio za pomocą Ctrl+A lub Ctrl+E.

Alternatywnie, jeśli znasz Vim, możesz włączyć tryb vi, umieszczając następujące w swoim pliku .bashrc:

set -o vi

To wszystko, co mam dzisiaj. Pamiętaj, aby zajrzeć do oficjalnej dokumentacji dotyczącej rozszerzenia historii, ponieważ zawiera ona listy opisujące każdy segment, i możesz łatwo wyciągnąć znacznie więcej z tych wskazówek.

Powiązane artykuły