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 histappendnon è impostato, questo non significa che la cronologia viene cancellata ad ogni uscita della shell. Senza histappendbash 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.
histappendhanno rilevanza se rootla cronologia raggiunge un disco? Ancora una volta, influenza solo ciò che è scritto, non se .
histappendcosì come HISTCONTROL=ignoredups:erasedups:ignorespacesembra un buon default per la maggior parte delle persone.
histappendefficace senza senso se ho HISTFILESIZE=e HISTSIZE=per una storia infinita?
Per compatibilità storica, suppongo. L' histappendopzione 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