2013-08-15 12 views
5

In qualsiasi momento, ho 3 accessi allo stesso server. Certo, io spesso uso dello schermo, ma presumo questo scopo mi permette di avere:combina cronologia su tty

1 session running something 
1 session looking at output 
1 session shuffling files to/from various places 

Se in qualsiasi momento perdo tutti e tre i collegamenti, perdo 2/3 della mia storia, come quando accedo di nuovo, ho ottenere la cronologia da una casuale delle mie tre connessioni.

C'è un modo per fermarlo e combinare tutti e tre i file di cronologia in 1?

In alternativa, c'è un modo per dichiarare ogni accesso come "ttyN", mantenendo ognuno con la sua storia separata separata, ma recuperabile/ricollegabile?

Grazie!

+0

Per cosa ti serve la tua storia? Una soluzione al tuo problema sembra non banale da fare da zero ... – Dru

+0

Puoi definire il nome del file di cronologia che una bash deve usare. Il file è writtten all'uscita del processo bash. (Ma non l'ho mai usato.) Usando questo, potresti avere 3 diversi file di cronologia finché inizi la tua bash con impostazioni diverse di "HISTFILE" – tue

risposta

-1

Esistono numerose opzioni che è possibile impostare per impedire alle istanze di Bash di sovrascrivere le rispettive cronologie. Vedere this FAQ per una spiegazione completa:

Nel vostro .bashrc, aggiungere

HISTFILESIZE=400000000 
HISTSIZE=10000 
PROMPT_COMMAND="history -a" 
export HISTSIZE PROMPT_COMMAND 
shopt -s histappend 
+0

Non sembra funzionare. L'ho inserito in .bashrc, riavviato (dovevo comunque farlo), e al re-login, i comandi tty della sessione 2 non sono nella cronologia della sessione 1. Né viceversa. –

+0

Ciò impedisce solo a shell diverse di sovrascrivere il file di cronologia. Non fa cronologia da una shell in esecuzione disponibile in un'altra in tempo reale. Se chiudi entrambe le shell in ordine arbitrario e ne inizi una terza, vedrai che la cronologia di entrambe è disponibile nella terza, invece di una sola prima di iniziare. –

1

Possibile soluzione?

Dopo aver aperto il terminale/Schermo

iniziare la shell con un ambiente Storia-File:

HISTFILE=$HOME/session1-history bash 

e continuare a lavorare con questo bash. Per eseguire una diversa cronologia della sessione

HISTFILE=$HOME/session2-history bash 

ecc

0

Se ho capito le vostre esigenze a destra si dispone di più sessioni di terminale aperta e vogliono comandi inseriti in una sessione di essere disponibile tramite la storia in altre sessioni.

Hai bisogno di mettere queste righe in cima alla vostra ~/.bashrc:

export HISTFILESIZE=100000 
export HISTSIZE=100000 
# avoid & erase dups 
export HISTCONTROL=ignoredups:erasedups 
shopt -s histappend 
# save & reload history after each command enter in shell 
export PROMPT_COMMAND="\history -a; \history -c; \history -r; $PROMPT_COMMAND" 

cosa più importante è histappend che fa in modo che le nuove linee di storia vengono aggiunte al file di cronologia ogni volta.

PS: è necessario premere Invio per visualizzare la cronologia aggiunta più recente in ogni sessione.

Per soluzione più robusta See: http://ptspts.blogspot.in/2011/03/how-to-automatically-synchronize-shell.html

0

Basta aggiungere questo nel file .bashrc.

# Avoid duplicates.. 
export HISTCONTROL=ignoredups:erasedups 

# Append history entries.. 
shopt -s histappend  

# After each command, save and reload history 
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r" 

Trovato questa risposta in questo Unix Stackexchange post.

Ho provato questo e sembra funzionare su più terminali contemporaneamente, solo cattura è necessario eseguire un comando per il terminale per recuperare l'ultima storia da .bash_history.

Ad esempio, se apro il primo terminale e digito echo check 1, apro un secondo terminale e digito echo check 2.Ora se torno al primo terminale e preme il tasto su, non otterrò echo check 2, poiché l'ultima volta che la cronologia è stata recuperata dal file di cronologia è stata quando ho eseguito il comando precedente. Quindi posso semplicemente premere senza specificare un comando e recupererà le ultime voci della cronologia. Ora se premo il tasto Su, verrà visualizzato echo check 2, che è il comportamento previsto.

1

C'è un logger di cronologia shell open source per bash e zsh che risolverà il problema (dichiarazione di non responsabilità: l'ho scritto e lo manterrò).

https://github.com/barabo/advanced-shell-history

L'idea è che i comandi sono scritti in un database sqlite3 con un gancio bash incorporato. Se hai davvero bisogno di tornare indietro e capire quali comandi hai inserito/per quanto tempo sono stati eseguiti/quali sono stati i loro codici di uscita, dovresti fare un tentativo.

Mi ha salvato molte volte.