To samo polecenie jest ciągle wymieniane w mojej historii. Jak mogę tego uniknąć? Wiem, że to możliwe, HISTCONTROL
ale nie znalazłem właściwej drogi.
To samo polecenie jest ciągle wymieniane w mojej historii. Jak mogę tego uniknąć? Wiem, że to możliwe, HISTCONTROL
ale nie znalazłem właściwej drogi.
Odpowiedzi:
Ze strony podręcznika bash
:
HISTCONTROL
Rozdzielona dwukropkami lista wartości kontrolujących sposób zapisywania poleceń na liście historii. Jeśli lista wartości zawiera
ignorespace
, wiersze rozpoczynające się znakiem spacji nie są zapisywane na liście historii. Wartośćignoredups
powoduje, że wiersze pasujące do poprzedniego wpisu historii nie zostaną zapisane. Wartośćignoreboth
jest skrótem dlaignorespace
iignoredups
. Wartośćerasedups
powoduje usunięcie wszystkich poprzednich wierszy pasujących do bieżącego wiersza z listy historii przed zapisaniem tego wiersza. Wszelkie wartości niewymienione na powyższej liście są ignorowane. Jeśli HISTCONTROL jest rozbrojony lub nie zawiera poprawnej wartości, wszystkie linie odczytywane przez analizator powłoki są zapisywane na liście historii, z zastrzeżeniem wartości HISTIGNORE. Drugi i kolejne wiersze polecenia złożonego z wielu wierszy nie są testowane i są dodawane do historii niezależnie od wartości HISTCONTROL.
Więc wstaw następujący wiersz w ~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
większości przypadków działałoby, gdyby zmodyfikowano plik .bashrc, ale nie zawsze tak jest.
source ~/.bashrc && source ~/.bash_profile
Umieść to w ~/.bashrc
:
export HISTCONTROL=ignoredups
Zamiast tego możesz użyć ignoreboth
. Jest to skrót zarówno dla ignorespaces
(poleceń zaczynających się od spacji), jak i ignoredups
(duplikatów).
Wolę ignoredups
sam, ponieważ uważam, że domyślne zachowanie ignorowania poleceń ze spacjami z przodu jest dość denerwujące, gdy kopiuję polecenie ze strony internetowej i nie zostaje ono zapisane, ponieważ przypadkowo skopiowałem też w miejscu .... Ale każdy ich własny.
ignoredups
przyczyn wierszy pasujących do poprzedniego wpisu historii nie została zapisana . Usuwa tylko kolejne identyczne linie.
Umieszczenie tego ~/.bashrc
spowoduje zastosowanie rozwiązania @ alvin w różnych sesjach jako wlell
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
export HISTCONTROL
i wasze nie? Co za różnica? Działa dla mnie bez eksportu, jestem po prostu ciekawy
export
udostępnia zmienną podprocesom. stackoverflow.com/q/1158091/552621 W przypadku HISTCONTROL
, PROMPT_COMMAND
itd, zmienne te są wykorzystywane przez samego zbiornika, więc może ich eksportu (dzieci przetwarza) nie jest konieczne.
export HISTCONTROL=erasedups
Jednoznaczne nagrywanie każdego nowego polecenia jest trudne. Najpierw musisz dodać
~/.profile
lub podobne:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Następnie musisz dodać do ~/.bash_logout
:
history -a
history -w