Gestione della cronologia di Bash con più terminali

86

Io uso principalmente Terminator, e di solito è aperto con 3 finestre di terminale diviso. Uso anche il terminale Gnome per vari motivi.
Mi chiedo come viene gestita la cronologia di bash in questo caso poiché a volte mi mancano i comandi emessi in precedenza quando eseguo history

Ad esempio, il mio prompt mostra la riga attuale della cronologia di bash ( \! ) e se lancio Terminator con 3 finestre di terminale diviso ottengo la stessa linea di storia (diciamo 100) su tutti i terminali. Quale storia verrà salvata?

Anche lanciando Gnome Terminal dopo aver usato Terminator I ottengo la linea 100 all'avvio indipendentemente da tutti i comandi emessi prima in Terminator

    
posta zetah 18.11.2011 - 07:39

4 risposte

77

La sessione di bash che viene salvata è quella per il terminale che è chiuso l'ultima volta. Se vuoi salvare i comandi per ogni sessione, puoi usare il trucco spiegato qui .

export PROMPT_COMMAND='history -a'
     

Per citare la manpage: "Se impostato, il valore viene eseguito come comando prima di emettere ogni prompt primario."

     

Quindi ogni volta che il mio comando termina, aggiunge l'elemento di cronologia non scritta a ~/.bash_history prima di visualizzare nuovamente il prompt (solo $ PS1).

     

Quindi, dopo aver messo quella riga in /etc/bash.bashrc , non devo ritrovarmi a reinventare le ruote o perdere preziosi secondi a riscrivere le cose solo perché ero pigro con i miei terminali.

Ad ogni modo, dovrai tenere conto che i comandi di diverse sessioni verranno mixati nel tuo file di cronologia, quindi non sarà così semplice leggerlo più tardi.

Vedi anche:

risposta data jcollado 18.11.2011 - 07:52
26

Dopo letture multiple di man bash , utilizzo file di cronologia separati per ogni shell. Ho fatto un mkdir -m 0700 ~/.history quindi aggiunto

[[ -d ~/.history ]] || mkdir --mode=0700 ~/.history
[[ -d ~/.history ]] && chmod 0700 ~/.history
HISTFILE=~/.history/history.$$
# close any old history file by zeroing HISTFILESIZE  
HISTFILESIZE=0  
# then set HISTFILESIZE to a large value
HISTFILESIZE=4096  
HISTSIZE=4096  

al mio ~/.bashrc . Ogni tanto, mi ricordo di du -sk .history e lo pulisco. È bello avere tutti i comandi che ho digitato per me.

Ho appena usato quanto sopra per vedere cosa stavo facendo, ultimamente:
cut -f1 "-d " .history/* | sort | uniq -c |sort -n -r |less
o
cut -f1-2 "-d " .history/* | sort | uniq -c |sort -n -r |less
(per includere il primo argomento, ad esempio sudo mount nella catena di ordinamento).

    
risposta data waltinator 20.11.2011 - 00:48
4

Vedi anche " mantenere la cronologia persistente in bash " per un altro alternativa. Riguarda la tua richiesta di inviare tutti i comandi che sono stati digitati nel terminale qualsiasi in un file di "cronologia persistente" (insieme a ciò che di solito viene fatto per il normale .history ).

    
risposta data Eli Bendersky 25.01.2016 - 00:33
4

Per mostrare history da tutti i terminali:

Aggiungi export PROMPT_COMMAND='history -a; history -r' al tuo file .bashrc.

Fonte: link

risposta data Elijah Lynn 31.10.2013 - 20:17

Leggi altre domande sui tag