To samo polecenie jest ciągle wymieniane w mojej historii. Jak mogę tego uniknąć? Wiem, że to możliwe, HISTCONTROLale 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, HISTCONTROLale 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śćignoredupspowoduje, że wiersze pasujące do poprzedniego wpisu historii nie zostaną zapisane. Wartośćignorebothjest skrótem dlaignorespaceiignoredups. Wartośćerasedupspowoduje 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_loginwię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ę ignoredupssam, 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.
ignoredupsprzyczyn wierszy pasujących do poprzedniego wpisu historii nie została zapisana . Usuwa tylko kolejne identyczne linie.
Umieszczenie tego ~/.bashrcspowoduje 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 HISTCONTROLi wasze nie? Co za różnica? Działa dla mnie bez eksportu, jestem po prostu ciekawy
exportudostępnia zmienną podprocesom. stackoverflow.com/q/1158091/552621 W przypadku HISTCONTROL, PROMPT_COMMANDitd, 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ć
~/.profilelub podobne:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Następnie musisz dodać do ~/.bash_logout:
history -a
history -w