Odpowiedzi:
Jeśli chcesz uruchomić polecenie bez zapisywania go w historii, dodaj je z dodatkową spacją
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
Aby to zadziałało trzeba albo ignorespace
czy ignoreboth
w HISTCONTROL
. Na przykład uruchom
HISTCONTROL=ignorespace
Aby to ustawienie pozostało trwałe, umieść je w swoim .bashrc
.
Jeśli już uruchomiłeś polecenie i chcesz je usunąć z historii, najpierw użyj
history
aby wyświetlić listę poleceń w twojej historii. Znajdź numer obok tego, który chcesz usunąć (np. 1234) i uruchom
history -d 1234
Ponadto, jeśli wiersz, który chcesz usunąć, został już zapisany w $ HISTFILE (co zwykle dzieje się, gdy domyślnie kończysz sesję), będziesz musiał ponownie zapisać w $ HISTFILE, lub wiersz pojawi się ponownie, gdy otworzysz nowy sesja:
history -w
history -a
, w takim przypadku jest on już zapisany w pliku historii, a nie przy wyjściu w normalnej konfiguracji. W szczególności: mywiki.wooledge.org/BashFAQ/088
history -w
. W przeciwnym razie po wyjściu usunięta linia będzie nadal dostępna!
history -w
po history -d {num}
było dokładnie tym, czego potrzebowałem - ten krytyczny smakołyk powinien zostać dodany do odpowiedzi, w przeciwnym razie użytkownik może pomyśleć, że tymczasowe usunięcie z bieżącej powłoki jest trwałe.
history -w
jest niezbędny w przypadku wpisów, które zostały już zapisane w .bash_history
pliku. Jak się powielać (np. W CentOS 7 z konfiguracją zapasów): 1. zaloguj się 2. wprowadź polecenie echo foo
3. wyloguj się 4. zaloguj się ponownie 5. usuń wpis dla echo foo
6. wyloguj się 7. zaloguj się ponownie: wpis jest nadal dostępny. W zależności od tego, jak skonfigurujesz swoją historię bash, być może możesz odtworzyć ten problem na inne sposoby - tj. Jeśli sprowokujesz zapis historii przed wylogowaniem.
Aby wyczyścić całą historię, użyj
history -c
Aby usunąć pojedynczy wiersz, użyj
history -d linenumber
Mam to w swoim ~/.bashrc
, co powoduje, że polecenie $ forget
usuwa poprzednie polecenie z historii
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);
}
history -d $( history | tail -n 1 | cut -f 1 -d " " )
byłoby prostsze?
history | tail -n1
to history
samo polecenie, więc usunięcie tego numeru powoduje błędny wpis. Jednak history -d $( history | awk 'END{print $1-1}' )
łączy linię wybrać, pole zaznaczyć, a odejmowanie.
Jeśli chcesz zapomnieć o całej sesji bash, możesz wykonać kill
bieżący proces bash. Ponieważ zmienna $$
przytrzymaj pid
bieżącej powłoki, można zrobić:
kill -9 $$
Musisz zapisać zmiany po wyczyszczeniu historii. A jeśli nie chcesz mieć w historii polecenia czyszczenia historii, musisz uruchomić polecenie w ten sposób:
history -c && history -w && logout
Powodzenia.
Adding another point suppose if you want to delete a range of history lines
You can use below script.
Below example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done