Wybierz polecenia z historii bash


20

Naciśnięcie przycisku w górę jest uciążliwe i mogę przegapić polecenie, którego szukałem. Więc podczas pisania historyna terminalu otrzymuję wszystkie polecenia, które wcześniej wprowadziłem, indeksowane do liczby. Czy jest jakiś sposób, aby zadzwonić pod numer powiązany z poleceniem?


jakaś bardziej interaktywna opcja? są one tak podatne na błędy
mat

Odpowiedzi:


31

Historia bash może zrobić wiele pomocnych rzeczy, a poszukiwanie, o Strg-rktórym wspomniał Terry Wang, jest wśród nich ważne. Ale można również zrobić dokładnie to, o co prosiłeś.

Możesz ponownie wykonać poprzednie polecenie za pomocą !!. Dzięki temu możesz również edytować poprzednie polecenie. Jeśli na przykład zapomniałeś uzyskać uprawnienia roota do polecenia

apt-get install a-long-list-of-packages

nie musisz tego wszystkiego ponownie wpisywać. Zamiast tego po prostu zadzwoń

sudo !!

Jeśli chcesz ponownie wykonać polecenie w określonej pozycji z historii, możesz również użyć !na przykład

!3

aby ponownie wykonać polecenie w pozycji 3. Pamiętaj, że liczy się to od góry. Więc jeśli przechowujesz 500 poleceń w swojej historii, !1byłoby to „500 poleceń temu”. Możesz także użyć liczb ujemnych. Na przykład

!-2

wykonałby ponownie ostatnie polecenie.

Możesz także ponownie wykonać ostatnią komendę, która rozpoczęła się od łańcucha takiego jak

!apt-

który powtórzyłby ostatnią linię zaczynającą się od „apt-”. Jeśli chcesz ostatnie polecenie, w którym ciąg pojawił się w dowolnym miejscu w linii, możesz użyć czegoś takiego

!?pt-ge

Jest jeszcze więcej interesujących rzeczy, które może zrobić historia bash. Aby sprawić wrażenie szerokiego zakresu możliwości, możesz uzyskać konkretny dostęp do parametru polecenia z historii. Więc

!-5:3:p

wypisze trzeci parametr na piąty z ostatniego polecenia.

EDYCJA: Jeśli chodzi o komentarz Rudiego poniżej, przy standardowych ustawieniach rozszerzenia historii bash są wykonywane bezpośrednio. Prawdopodobnie najlepiej to opisuje się następująco: wywołanie podobne !-3jest zastępowane przez powłokę z trzecim ostatnim poleceniem z twojej historii, a następnie wykonywane dane wejściowe (z zastąpieniem). Więc jeśli wpiszesz !-3i naciśniesz, ENTERa twoje trzecie ostatnie polecenie było ls ~, to tak samo, jakbyś pisał ls ~ponownie i naciskał ENTER„sam”.

Jeśli tego nie chcesz, możesz ustawić opcję powłoki histverify. Aby ustawić i wyłączyć opcje powłoki, możesz przeczytać o shoptpoleceniu. Przy histverifyustawieniu wywołanie takie jak !-3zapisuje tylko zastąpienie z historii do linii poleceń, ale nie wykonuje go bezpośrednio. Musisz, że tak powiem, ENTERsamemu wcisnąć kluczowe - lub powstrzymać się od tego, jeśli zdecydujesz.


Więc !jest cholernie niebezpieczne ... Chciałbym wiedzieć, co !-4dokładnie zrobiłem przed uruchomieniem. Czy to pokazuje ci pierwszy? Fajne podsumowanie!
Rudie

1
@ Rudie To dobra uwaga, zaktualizowałem swoją odpowiedź. Funkcje historii mają przede wszystkim na celu przyspieszenie pracy i oszczędność naciśnięć klawiszy. Więc standardowe „Naprawdę, naprawdę to masz na myśli?” przynajmniej częściowo pokona ten cel. I chociaż możesz, normalnie nie wywołujesz polecenia „daleko” !-238. Nie powinno być trudne zapamiętanie twojego drugiego ostatniego, trzeciego ostatniego, może piątego ostatniego polecenia;) Tak często jak w Linuksie (i tak naprawdę w przypadku komputerów w ogóle), oczekuje się, że wiesz, co robisz. A jeśli naprawdę chcesz dodatkowej siatki bezpieczeństwa, to jest jedna shopt;)
Henning Kockerbeck

16

Tak jest. Jeśli na przykład chcesz wykonać polecenie, które ma obok niego numer 1234, wykonaj:

!1234

Inne przydatne rzeczy:

  • Jeśli chcesz uruchomić ostatnie uruchomione polecenie, wykonaj:

    !!
  • Jeśli chcesz uruchomić ostatnie uruchomione lspolecenie, wykonaj:

    !ls
  • Jeśli właśnie pobiegłeś ls /some/long/pathi chcesz cdto zrobić:

    cd !$

Po więcej informacji:



3

Jeśli znalazłeś numer historii polecenia i chcesz go wykonać ponownie, wpisz, !a następnie numer, np. !1234I naciśnij Enter. To część ekspansji historii ; możesz przypiąć do niego modyfikatory .

Jeśli chcesz edytować polecenie przed jego uruchomieniem, fc 1234wywołuje edytor zewnętrzny.

Ale jak już wspomniano Terry Wang, zwykle istnieją szybsze sposoby zlokalizowania polecenia w historii niż określenie jego numeru historii, w tym Ctrl+, Raby wywołać wyszukiwanie przyrostowe (naciśnij, Entergdy znajdziesz polecenie, które chcesz wykonać) lub fc PREFIXwykonać poprzednie polecenie zaczynające się od PREFIX.


1

historyKomenda pokaże wszystkie polecenia i towarzyszące im numery. Jeśli chcesz po prostu wykonać szybkie sprawdzenie przed uruchomieniem linii poleceń # 135, możesz wpisać:

echo !135

To pokaże ci, co zostanie wykonane.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.