Jak selektywnie nawigować w historii poleceń Bash na terminalu Linux [duplikat]

9

Wszyscy wiedzą (lub powinni wiedzieć!), Że na terminalu klawisze strzałek w górę i w dół służą do poruszania się po historii używanych poleceń.

Podczas codziennego korzystania z terminala historia poleceń prawdopodobnie będzie długą listą wielu różnych poleceń, co utrudni nawigację. Jako przykład, powiedzmy, że miesiąc temu użyłem iwconfigz określonym zestawem parametrów (jak powiedziałem, to tylko przykład, nie muszę teraz z tym bałagać), jak mogę przywołać to konkretne polecenie z wszystkimi argumentami i parametrami bez konieczności przeglądania setek poleceń historii?

Wiem, że mógłbym użyć historylisty poprzednio używanych poleceń i !nponownie wykonać polecenie n na tej liście, ale kiedy historia się powiększa, nie jest to również zbyt praktyczne.

Idealną rzeczą byłoby mieć coś, co pozwoli mi użyć jakiegoś skrótu do nawigacji po historii, ale tylko między instancjami zawierającymi to, co już wpisałem w wierszu poleceń; więc w moim przykładzie, po wpisaniu iwconfig, użyj kilku klawiszy (może PgUp i PgDown?), aby poruszać się po wpisach zaczynających się od iwconfig .

Jeśli nie jest to możliwe, fajnie byłoby również wydrukować listę typu historydo, ale będzie ona zawierała tylko to, co już wpisałem (podejrzewam, że dotyczy to polecenia historyi greppolecenia, ale nie jestem pewien, czy jest poprawna składnia); ale poprzednie rozwiązanie skrótów byłoby najlepszą opcją.

Sekhemty
źródło

Odpowiedzi:

12

Możesz przeszukać historię za pomocą Ctrl+, Ra następnie wpisać ciąg wyszukiwania (np. iwAby znaleźć iwconfig). Następnie możesz nadal poruszać się po historii w tym punkcie za pomocą klawiszy strzałek w górę i w dół lub ponownie nacisnąć Ctrl+, Raby znaleźć poprzednie wystąpienie.

Stefan Seidel
źródło
Nie jestem pewien, czy dobrze zrozumiałem, że to działa. Jeśli nacisnę Ctrl + R i piszę iwconfig, pokaże mi instancję, która ją zawiera (niekoniecznie najnowszą), ale jeśli użyję klawiszy strzałek, przejdzie przez wszystkie elementy, nie tylko te, które zawierają ciąg. Wydaje mi się, że wybiera konkretny punkt w historii, od którego ma się rozpocząć nawigacja (zamiast zaczynać od dołu, jak robi to klawisz w górę), ale poza tym nawigacja jest taka sama jak zawsze. Przegapiłem coś?
Sekhemty 30.04.13
Myślę, że to nie ma znaczenia, ale na wszelki wypadek używam konsoleemulatora terminala.
Sekhemty 30.04.13
Przepraszamy, zaktualizowałem odpowiedź na temat wyszukiwania poprzednich meczów.
Stefan Seidel
5

Po odrobinie praktyki odkryłem, jak korzystać z rozwiązania tego obejścia.

Dopasowałem poprawną składnię, aby wydrukować przefiltrowaną listę, zrobiłem to history | grep iwconfig(wcale nie było takie trudne); z wyjściem, którego mogę użyć !nz teraz łatwą do odczytania przefiltrowaną listą.

Sekhemty
źródło
3
Dodatkowa sztuczka: użyj !n:p. Spowoduje to wydrukowanie starego polecenia bez jego wykonania i przywrócenie go do historii. Następnie przejdź do niego jednym pociągnięciem strzałki w górę, a teraz możesz go edytować. Istnieje wiele innych głupich sztuczek, takich jak to: ss64.com/bash/history.html
Wandering Logic
3

Nie mogę skomentować odpowiedzi Stefana, ale zwykle musisz naciskać Ctrl + R. Zobacz tę stronę, aby uzyskać więcej informacji.

użytkownik2313067
źródło
2

Naciśnij „ctrl + r”, a następnie wprowadź szukany ciąg.

Jeśli nie ten, którego szukasz Następnie ponownie „ctrl + r”

Jeśli znaleziono, naciśnij Enter, aby go wykonać Lub naciśnij strzałkę w prawo ->, aby go edytować przed użyciem.

Santosh
źródło