Utworzyłem powiązane pytanie: askubuntu.com/questions/205520/… . Dups w historii jest przydatny, aby zobaczyć kontekst polecenia. Czego chcesz czasem pominąć duplikaty podczas drukowania historii.
justingordon
Odpowiedzi:
123
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 dla ignorespace i
ignoredups. 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.
Czy chcesz, żebym dodał HISTCONTROL = ignoreboth na dole ~ / .bashrc?
karthick87
1
@karthick Nie ma znaczenia, gdzie to umieścisz, ale dno jest w porządku.
Izajasza
Podczas instalacji Ubuntu 12.04 musiałem dokonać tej modyfikacji. W ~/.bash_loginwiększości przypadków działałoby, gdyby zmodyfikowano plik .bashrc, ale nie zawsze tak jest.
ck-
3
Nie zapomnij uruchomić ich po aktualizacji swojego profilu bash / plików rc -source ~/.bashrc && source ~/.bash_profile
Eric Kigathi
23
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.
@ karthick87 cytowany z innej odpowiedzi: Wartość ignoredupsprzyczyn wierszy pasujących do poprzedniego wpisu historii nie została zapisana . Usuwa tylko kolejne identyczne linie.
AL
10
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"
Dlaczego jego export HISTCONTROLi wasze nie? Co za różnica? Działa dla mnie bez eksportu, jestem po prostu ciekawy
felwithe
1
Dobre pytanie! Chciałbym również poznać odpowiedź. Zasadniczo 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.
Odpowiedzi:
Ze strony podręcznika
bash
:Więc wstaw następujący wiersz w
~/.bashrc
:export HISTCONTROL=ignoreboth:erasedups
źródło
~/.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
:Zamiast tego możesz użyć
ignoreboth
. Jest to skrót zarówno dlaignorespaces
(poleceń zaczynających się od spacji), jak iignoredups
(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.źródło
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Źródło: Linux: Historia Bash: „ignorowane” i „wymazywane” powodują konflikt ze wspólną historią dla różnych sesji
źródło
export HISTCONTROL
i wasze nie? Co za różnica? Działa dla mnie bez eksportu, jestem po prostu ciekawyexport
udostępnia zmienną podprocesom. stackoverflow.com/q/1158091/552621 W przypadkuHISTCONTROL
,PROMPT_COMMAND
itd, zmienne te są wykorzystywane przez samego zbiornika, więc może ich eksportu (dzieci przetwarza) nie jest konieczne.źródło
Dodaj następujące elementy do
~/.bashrc
:Aby to zrobić, możesz użyć tego polecenia:
źródło
Jednoznaczne nagrywanie każdego nowego polecenia jest trudne. Najpierw musisz dodać
~/.profile
lub podobne:Następnie musisz dodać do
~/.bash_logout
:źródło