Storia rovinata


15

In modalità gui, quando un utente ha più di un terminale aperto, come fanno i terminali a riscrivere il file cronologico di quell'utente? il motivo per cui chiedo è perché, è possibile che in ciascuno dei terminali l'utente esegua comandi diversi. Quindi, il file della cronologia finisce per salvare i comandi da tutti i terminali o solo dal primo da aprire? O c'è qualche altro tipo di schema che viene utilizzato per affrontare questa situazione?

Risposte:


11

Dipende interamente da come la shell sceglie di gestirlo

bashper impostazione predefinita sovrascriverà il file della cronologia con la cronologia locale di ogni shell man mano che esce, quindi vince l'ultima shell che esce. L' histappendopzione causerà invece l'aggiunta alla cronologia principale ( shopt -s histappend).

zsh fa lo stesso per impostazione predefinita e ha alcune opzioni per gestirlo:

  • appendhistory - La cronologia di ogni shell viene aggiunta al file della cronologia master all'uscita della shell
  • incappendhistory - Il file della cronologia principale viene aggiornato ogni volta che viene eseguita una riga in qualsiasi shell, invece di attendere fino a quando quella shell non viene chiusa
  • sharehistory- Mi piace incappendhistory, ma estrae anche le modifiche dal file della cronologia principale in tutte le shell in esecuzione, quindi puoi eseguire un comando in una shell e quindi premere Upin un'altra shell e vederlo

Ora dimmi come farlo a Bash, per favore;)
tante

1
@tante Non shopt -s histappendfunziona?
Michael Mrozek

0

Inizialmente ho avuto questa idea dal libro "Unix Power Tools" di O'Reilly.

Nel mio .profileset:

export HISTFILE=$HOME/.sh_hist.$$

Ogni volta che mi .profileviene letta, ottengo un nuovo file di cronologia denominato con il PID della mia sessione. Se ho più accessi, ogni accesso ottiene un file cronologico univoco. Funziona in kshe bash.

Se stai semplicemente aprendo nuovi terminali in una sessione X, quelli di solito non sono shell di login, ma puoi configurarli per agire come shell di login. Ad esempio, rxvt +lsverrà avviato rxvtcome shell di accesso. Controlla i documenti per qualsiasi terminale che stai utilizzando.

Inoltre, a meno che tu non stia usando un file .logouto .bash_logout(o qualche altro mezzo) per ripulire, alla fine avrai una gran quantità di .sh_histfile.


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.