history
polecenie wyświetla wszystkie wyniki, ale możemy filtrować, aby uzyskać określone polecenie za pomocą history | grep searchingCommand
. To jest naprawdę pomocne.
Ale problem polega na tym, że pokazuje te polecenia, które zostały wprowadzone z błędem literówki lub które zakończyły się niepowodzeniem. Zatem znalezienie właściwego jest naprawdę uciążliwe. Sprawdziłem ten link: Selektywna historia poleceń w terminalu? ale to nie było moje rozwiązanie.
Czy istnieje sposób na usunięcie tych poleceń z historii, które były niepoprawne w podanym czasie lub później?
Odpowiedzi:
Chciałbym dodać inną metodę modyfikowania (lub usuwania) wpisów historii, którą znalazłem raczej przypadkowo podczas pracy z bash:
Aby to zademonstrować, zacznij od wykonania następujących trzech poleceń w bash:
Możesz teraz ponownie wybrać te polecenia za pomocą klawiszy strzałek lub Ctrl+ pi Ctrl+ n.
Powiedz, że chcesz zmodyfikować pierwsze dwa polecenia. Poruszaj się po historii, aż
echo 1
pojawi się i zmień ją naecho 1 - changed
, ale NIE NACISNĄĆ ENTER. Jeśli teraz przejdziesz dalej w swojej historii, linia ta pozostanie w zmodyfikowanym stanie i możesz się do niej wycofać i wrócić. Teraz przejdź do liniiecho 2
i zmień naecho 2 - changed
, ponownie nie naciskaj enter. Aby zapisać zmiany w tych wierszach, wybierz dowolne polecenie w historii oprócz tych dwóch i naciśnij Ctrl+ c.Oczywiście zamiast modyfikować wpis historii, możesz go również usunąć, co spowoduje powstanie pustego wiersza przy tym wpisie. Aby usunąć wiersz aktualnie wyświetlany w wierszu polecenia, naciśnij Ctrl+ e(który przeskakuje na koniec linii), a następnie Ctrl+ u(co usuwa tekst od początku linii do kursora).
Zobacz także https://unix.stackexchange.com/questions/195668/what-can-cause-an-item-to-be-deleted-from-my-bash-history/195726#195726, aby uzyskać bardziej szczegółowe wyjaśnienie zaplecze techniczne.
Najprostszy sposób:
Uwaga :
Zmienia to tylko bieżące polecenia sesji. Jeśli chcemy zmienić starsze polecenia i zapisać zmiany, musimy uruchomić następujące polecenie przed zamknięciem terminala:
źródło
ctrl+r
aby wyszukać polecenie, które chcesz usunąć / zmodyfikować. 2.end
aby przenieść polecenie i usunąć / zmodyfikować polecenie. 3.ctrl+n
przejść do następnej linii, a następnie 4.ctrl+c
Posługiwać się:
aby usunąć pozycję historii z przesunięciem,
OFFSET
nawet zanim została dodana do pliku historii bash. Aby znaleźć właściweOFFSET
, wystarczy uruchomićhistory
polecenie. Jest to liczba od początku wiersza, która zawiera wpis historii, który chcesz go usunąć.Aby zapisać zmiany w historii, użyj:
Zobacz więcej szczegółów w tym przewodniku .
źródło
history -w
posłowie, aby zapisać zmiany. Również PRZESUNIĘCIE oznaczahistory
wyświetlaną liczbę . Jeśli linia, którą próbujesz usunąć, to 873, użyjhistory -d 873
.history -w
po,history -d
aby zapisać zmiany.Edytuj plik
~/.bash_history
i usuń raz za pomocą literówekNa przykład wstaw to polecenie:
Edytuj coś, co lubisz, a następnie zapisz plik i uruchom ponownie terminal. Polecenie root to:
jeśli chcesz usunąć wszystko
history -c
, załatw sprawęźródło :
źródło
.bash_history
?history -c
nie działa Kiedy zamykam terminal i otwieram go ponownie, historie nie są usuwane. -1 twoja odpowiedź-c Clear the history list. This may be combined with the other options to replace the history list completely.
źródłohistory -w
po,history -c
aby zapisać zmiany.Jeśli chcesz natychmiast usunąć go z tego samego terminala, musisz najpierw dodać do pliku ~ / .bashrc.
i uruchom ponownie terminal.
Możesz dodać go w dowolnym miejscu w pliku .bashrc. Dodałem jak poniżej wraz z innymi rzeczami związanymi z historią.
Zwykle podczas sesji bash wykonywane polecenia nie są zapisywane w .bash_history, dopóki sesja nie zostanie zakończona, a
PROMPT_COMMAND='history -a'
następnie wprowadza polecenie wtedy i tam w .bash_history.Teraz, gdy popełnisz błąd lub błąd w poleceniu i chcesz go usunąć wtedy i tam, po prostu wykonaj następujące czynności
i tada zostanie usunięty.
Aby to uprościć, możesz dokonać aliasu na coś prostszego i użyć go, np
Wykonanie
rh
usunie ostatnio wykonane polecenie z historii.Powyższe jest tymczasowym aliasingiem, który trwa tylko dla sesji. Aby dodać go na stałe lub na stałe
do .bashrc
UWAGA
Po obu stronach nie powinno być miejsca
=
Jeśli nie chcesz aliasu, możesz wykonać następujące czynności
Stwórz nazwę commada
rh
i umieść ją w/bin
katalogu:Otwórz plik powiedz
rh
i wklej następujący kod, zapisz i zamknij:sed -i '$d' ~/.bash_history
Udostępnij
rh
plik wykonywalny i umieść go w/bin
katalogu:Teraz użyj
rh
polecenia, aby usunąć ostatnie polecenie z historii.źródło
PROMPT_COMMAND='history -a'
w.bashrc
pliku? A co dokładnie zrobi? Próbowałemsed -i '$d' ~/.bash_history
to działa bez edycji.bashrc
!! Ale alias nie działa. Przyjmę twoją odpowiedź, jeśli tylko opracujesz moje pytanie i sprawisz, że alias będzie działał .. :).bash_history
pliku ..: P w jakikolwiek sposób .. Nie ma problemu .. Wykonałem własne polecenie i umieściłem je w/bin
informator. Ponieważ z twojego polecenia:sed -i "$d" ~/.bash_history
działa dobrze. Przyjmuję twoją odpowiedź .. :)aby usunąć wiele linii (np. od 1974 do 1990, sprawdź
history
poleceniem):zwróć uwagę, że numer wiersza do usunięcia jest zawsze taki sam, ponieważ usuwasz go stale i przechodzisz do następnego.
źródło
Jeśli używasz opcji „set -o vi” w bash (bardzo przydatne do wyszukiwania wstecz za pomocą klawisza Escape), możesz wyszukać linię i usunąć linię za pomocą „dd” w taki sam sposób jak w „vi”.
źródło
j
lubk
później,dd
aby faktycznie usunąć polecenie z historii. Jeśli wpisuję inne polecenie lub po prostu naciskamEnter
, bash wydaje się zakładać, że jest to po prostu nowe polecenie i że powinno ono zachować stare polecenie w historii. Interesujące jest również zauważyć, że gdy jest wykonane poprawnie, usuwa polecenie, ale go nie usuwa - wynikiem są puste wpisy historii. Jest to jednak wystarczające do usuwania haseł, które musiałem wpisać w wierszu poleceń, i znacznie łatwiejsze niż inne odpowiedzi, więc bardzo dziękuję za opublikowanie tego!Miałem sytuację, w której miałem zbędne wpisy w mojej historii bashów od Yubikey - może około 50, pasujące do „ccccc .....”. Idealnie chciałem znaleźć sposób na usunięcie wpisów pasujących do wzorca, co, jak sądzę, można zrobić z sed lub czymś podobnym, zakładając, że Twoja historia ignoruje puste.
W każdym razie stałem się leniwy i skończyło się na tym, że korzystałem z vima, szukając „cccc” i używając „dd” podczas przeglądania każdego meczu. Nie trwało to dłużej niż minutę.
źródło