Odpowiedzi:
i właśnie przypomniałem sobie inną odpowiedź, ta jest faktyczną odpowiedzią na twoje pytanie.
jeśli masz „ignorowanie” w HISTCONTROL, to bash nie zapamięta żadnej linii rozpoczynającej się spacją. nie pojawi się nawet w bieżącej historii powłoki, nie mówiąc już o zapisaniu do $ HISTFILE.
np. mam eksport HISTCONTROL = 'ignoreboth: erasedups' w moim ~ / .bashrc
oto szczegóły ze strony man bash:
HISTCONTROL Rozdzielona dwukropkami lista wartości kontrolujących działanie poleceń zapisane na liście historii. Jeśli lista wartości zawiera bez względu na to, wiersze zaczynające się od znaku spacji nie są zapisane na liście historii. Wartość zignorowanych powoduje linie dopasowanie do poprzedniego wpisu historii, aby nie zostać zapisane. Wartość ignoreboth jest skrótem od ignorowania i ignorowania. Wartość z wymazanych powoduje, że wszystkie poprzednie linie pasują do bieżącej linii do usunięcia z listy historii przed zapisaniem tego wiersza. Wszelkie wartości niewymienione na powyższej liście są ignorowane. Jeśli HISTCONTROL jest unset lub nie zawiera poprawnej wartości, wszystkie linie odczytywane przez parser powłoki jest zapisywany na liście historii, z zastrzeżeniem wartości HISTIGNORE. Druga i kolejne linie wielu linii złożone polecenie nie jest testowane i są dodawane do historii niezależnie od wartości HISTCONTROL.
Oto kilka lekcji historii, które wyciągnąłem z Google:
Możesz ustawić historię tak, aby ignorowała niektóre ciągi. W tym przykładzie zignorowałem polecenia ls, passwd i wszelkie polecenia poprzedzone spacją znaków.
export HISTIGNORE = "ls: passwd:"
Aby wyłączyć historię sesji, możesz wydać:
eksport HISTSIZE = 0
Jeśli chcesz tylko usunąć ostatnie polecenie z historii, możesz nacisnąć Up-arrow, a następnie Ctrl - U(usunąć do początku wiersza), a następnie Up-arrowponownie.
Możesz usunąć dowolną pojedynczą linię z historii w ten sposób. Wystarczy użyć strzałki w górę, wyszukiwania lub cokolwiek Ctrl - U, aby ustawić bieżący edytowany wiersz poleceń, a następnie nacisnąć , a następnie Up-arrowlub, Down-arrowaby przejść do innej linii historii.
Odkryłem to przypadkiem przed laty. Nie mam pojęcia, czy jest to udokumentowane, czy nie.
Zasadniczo jednak łatwiej jest nie zapisywać historii bieżącej powłoki za pomocą:
HISTFILE=/dev/null
Możesz rozbroić HISTFILE
zmienną. Od man bash
:
HISTFILE Nazwa pliku, w którym zapisana jest historia poleceń (patrz JEGO- TORY poniżej). Wartość domyślna to ~ / .bash_history. Jeśli nie jest ustawiony, historia poleceń nie jest zapisywana, gdy powłoka interaktywna wychodzi.
Nie sądzę, żeby to zapobiegało pojawianiu się polecenia w lokalnej historii powłoki przed zamknięciem powłoki.
Widzę, że nikt nie napisał tej metody, więc zrobię to.
history -d $((HISTCMD-1)) && history -d <command or number of command>
history -d
usuwa wspomniany wpis z historii.
HISTCMD
przechowuje numer komendy, która ma zostać wykonana w następnej kolejności. Tak więc (HISTCMD-1) odnosi się do ostatnio wykonanego polecenia.
Zrobiłem krótki film bash, który pokazuje, jak to działa: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2
Po uruchomieniu polecenia i ponieważ usuwa ono również samo polecenie, przejście w górę ze strzałką nie spowoduje wyświetlenia polecenia, więc jeśli planujesz często go używać, najlepiej byłoby utworzyć alias:
alias hc='history -d $((HISTCMD-1)) && history -d $1'
Następnie możesz zrobić:
$ hc command