Dopo aver scoperto cosa shopt -s histappend
significa , sembra un'impostazione molto sana e sono sorpreso che non sia un valore predefinito. Perché qualcuno dovrebbe voler cancellare la propria cronologia su ogni uscita della shell?
Dopo aver scoperto cosa shopt -s histappend
significa , sembra un'impostazione molto sana e sono sorpreso che non sia un valore predefinito. Perché qualcuno dovrebbe voler cancellare la propria cronologia su ogni uscita della shell?
Risposte:
Bene, quando histappend
non è impostato, questo non significa che la cronologia viene cancellata ad ogni uscita della shell. Senza histappend
bash legge il file hist all'avvio in memoria - durante l'operazione vengono aggiunte nuove voci - e all'uscita della shell le ultime righe HISTSIZE vengono scritte nel file della cronologia senza aggiungere, ovvero sostituendo il contenuto precedente.
Ad esempio, se il file hist contiene 400 voci, durante il runtime bash vengono aggiunte 10 nuove voci: histsize è impostato su 500, quindi il nuovo file hist contiene 410 voci.
Questo comportamento è problematico solo se si utilizzano più istanze bash in parallelo. In tal caso, il file della cronologia contiene solo i contenuti dell'ultima shell esistente.
Indipendentemente da ciò: ci sono alcune persone che vogliono cancellare la loro cronologia all'uscita della shell per motivi di privacy.
histappend
hanno rilevanza se root
la cronologia raggiunge un disco? Ancora una volta, influenza solo ciò che è scritto, non se .
histappend
così come HISTCONTROL=ignoredups:erasedups:ignorespace
sembra un buon default per la maggior parte delle persone.
histappend
efficace senza senso se ho HISTFILESIZE=
e HISTSIZE=
per una storia infinita?
Per compatibilità storica, suppongo. L' histappend
opzione non esisteva fino a bash 2.0.
histappend
.
bash
'pure' o una distribuzione fornita.bashrc
. per il primo, @Gilles è probabilmente corretto. in quest'ultimo senso,-s histappend
è predefinito, ad esempio, Debian, dal 2008: bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459