Perché qualcuno non dovrebbe impostare 'histappend' in bash?


36

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?


a parte l'incomprensione di ciò che fa questa opzione - corretto da @maxscchlepzig - "default" ha almeno due fonti: 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
underscore_d

3
Bene, unix non è esattamente famoso per i valori predefiniti sani? Sono arrivato ad aspettarmi i valori di default più ostili di default: P (minore esagerato)
olejorgenb

Risposte:


34

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.


Inoltre, per motivi di sicurezza, può essere una buona idea non salvare la cronologia per l'utente root. Questa funzione consente a root di avere una cronologia della shell senza che sia mai stata salvata su disco.
Mei,

1
+1 per "non significa che la cronologia viene cancellata ad ogni uscita della shell". Questo è spiegato perfettamente altrove - ma forse non abbastanza brevemente da raggiungere alcuni lettori, specialmente nel contesto del nome dell'opzione (OK, potrei essere stato uno di quei lettori per un po '). @Mei, in che modo entrambe le permutazioni histappendhanno rilevanza se rootla cronologia raggiunge un disco? Ancora una volta, influenza solo ciò che è scritto, non se .
underscore_d

5
qualcuno esegue meno di 2 istanze bash? histappendcosì come HISTCONTROL=ignoredups:erasedups:ignorespacesembra un buon default per la maggior parte delle persone.
dashesy

È histappendefficace senza senso se ho HISTFILESIZE=e HISTSIZE=per una storia infinita?
Marc.2377,

1
@dashesy Personalmente non mi piace ignorare / cancellare voci duplicate. Ho HISTTIMEFORMAT abilitato e mi piace poter tornare indietro e vedere quando ho emesso un comando ... e se l'ho emesso più volte, mi piace sapere quando è stato emesso ognuno di essi. È una preferenza personale, a cui appartengono. ;)
msb

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.