Vraag Hoe dubbele vermeldingen in .bash_history voorkomen


Dezelfde opdracht wordt keer op keer in mijn geschiedenis vermeld. Hoe kan ik dit vermijden? Ik weet dat het mogelijk is via HISTCONTROL maar ik heb de juiste manier niet gevonden.


88
2017-12-02 20:05


oorsprong


Ik heb een gerelateerde vraag gemaakt: askubuntu.com/questions/205520/.... Dup's in de geschiedenis zijn handig om de context van een opdracht te bekijken. Wat u wilt vermijden dups soms wanneer u de geschiedenis afdrukt. - justingordon


antwoorden:


Van de bash man pagina:

HISTCONTROL

Een dubbele lijst met waarden die bepalen hoe opdrachten worden opgeslagen     de geschiedenislijst. Als de lijst met waarden bevat ignorespace, lijnen     die beginnen met een spatie worden niet opgeslagen in de geschiedenislijst. EEN     waarde van ignoredups veroorzaakt regels die overeenkomen met het vorige geschiedenisitem     niet worden opgeslagen. Een waarde van ignoreboth is steno voor ignorespace  en      ignoredups. Een waarde van erasedups zorgt ervoor dat alle vorige regels overeenkomen met de     huidige regel die moet worden verwijderd uit de geschiedenislijst voordat die regel is     gered. Elke waarde die niet in de bovenstaande lijst voorkomt, wordt genegeerd. Als HISTCONTROL is     niet ingesteld, of bevat geen geldige waarde, alle lijnen die door de shell worden gelezen     parser worden opgeslagen in de geschiedenislijst, afhankelijk van de waarde van HISTIGNORE.     De tweede en volgende regels van een meerregelige samengestelde opdracht zijn dat niet     getest en worden toegevoegd aan de geschiedenis, ongeacht de waarde van HISTCONTROL.

Dus zet de volgende regel in uw ~/.bashrc:

export HISTCONTROL=ignoreboth:erasedups


99
2017-12-02 20:09



Wil je dat ik HISTCONTROL = ignoreboth onderaan ~ / .bashrc toevoeg? - karthick87
@karthick Het maakt niet uit waar je het neerzet, de bodem is prima. - Isaiah
Op mijn installatie van Ubuntu 12.04 moest ik deze aanpassing aanbrengen ~/.bash_login Meestal zou het werken als .bashrc wordt gewijzigd, maar dat is niet het geval alle de tijd. - ck-
Vergeet niet om deze uit te voeren nadat je je bashprofiel / rc-bestanden hebt bijgewerkt - source ~/.bashrc && source ~/.bash_profile - Eric Kigathi


Steek dit in uw ~/.bashrc:

export HISTCONTROL=ignoredups

Je zou in plaats daarvan kunnen gebruiken ignoreboth. Dit is een afkorting voor beiden ignorespaces (opdrachten beginnend met spaties) en ignoredups (Duplo's).

ik geef de voorkeur aan ignoredups alleen omdat ik vind dat het standaardgedrag van het negeren van commando's met spaties aan de voorzijde best vervelend is als ik een commando van een website kopieer en het niet wordt opgeslagen omdat ik per ongeluk ook in een spatie heb gekopieerd .... Maar voor elk hun eigen.


20
2017-12-02 20:10



Er zijn nog steeds duplicaten .. Wat kan het probleem zijn?imgur.com/fXeLQ.png - karthick87
@ karthick87 geciteerd uit een ander antwoord: Een waarde van ignoredups zorgt ervoor dat regels die overeenkomen met het vorige geschiedenisitem niet worden opgeslagen. Het verwijdert alleen opeenvolgende identieke regels. - A.L


Dit invoegen ~/.bashrc past @ alvin's oplossing toe in verschillende sessies

HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

Bron: Linux: Bash-geschiedenis: conflicten met "ignoredups" en "gewist-ups" met gemeenschappelijke geschiedenis in alle sessies


7
2017-08-31 15:44



Waarom gebruikt hij export HISTCONTROL en die van jou niet? Wat is het verschil? Het werkt voor mij zonder export, ik ben gewoon nieuwsgierig - felwithe
Goede vraag! Ik zou ook graag het antwoord willen weten. In het algemeen export maakt de variabele beschikbaar voor subprocessen. stackoverflow.com/q/1158091/552621 In het geval van HISTCONTROL, PROMPT_COMMAND, enz., deze variabelen worden gebruikt door de shell zelf, dus misschien is het exporteren ervan (naar kinderprocessen) niet nodig. - Nour Chawich


export HISTCONTROL=erasedups

4
2017-12-03 02:29





Voeg het volgende toe aan uw ~/.bashrc:

export HISTCONTROL=ignoredups

Om dit te doen, kunt u deze opdracht gebruiken:

nano ~/.bashrc

3
2017-12-02 20:11





Om elke nieuwe opdracht op een unieke manier vast te leggen is lastig. Eerst moet je toevoegen aan ~/.profile of vergelijkbaar:

HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'

Dan moet je toevoegen aan ~/.bash_logout:

history -a
history -w

0
2018-02-04 18:42