Come posso vedere la cronologia di Bash da più di una sessione terminale in Ubuntu? [duplicare]


11

Possibile duplicato: i
file cronologici possono essere unificati in bash?

Uso Ubuntu Server 9.10 e vorrei essere in grado di vedere la mia cronologia bash per più di una sessione terminale. Vale a dire i miei ultimi 200 comandi o giù di lì, anche se sono stato disconnesso tra.

Quando uso il, historyvedo solo tutti i comandi della mia sessione terminale reale. Come posso vedere più cronologia dei comandi da Bash? Esistono impostazioni specifiche per bash che dovrei modificare dai valori predefiniti in Ubuntu?

Non ho un ~/.bash_historyfile. Ma ho un ~/.bashrccon HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupseHISTCONTROL=ignoreboth

echo $HISTFILE
/home/sanoj/.bash_history
echo $HISTSIZE
500
echo $HISTFILESIZE
500
echo $HISTCONTROL
ignoreboth

AGGIORNAMENTO: ora sto provando Ubuntu Server 10.10 in VirtualBox. Se spengo VirtualBox senza il comando shutdown, la prossima volta che eseguo l'avvio, i comandi dell'ultima sessione non vengono salvati nel file cronologico.

I comandi vengono salvati solo se spengo la macchina con il comando di spegnimento. Ad esempio spegnimento -P 0.

Questo deve essere il motivo del mio problema. Quindi devo capire come salvare la cronologia dei comandi più spesso. Ad esempio dopo ogni comando.


Cosa ottieni se lo fai echo $HISTSIZEe echo $HISTFILESIZE? Il mio (Ubuntu) ~/.bashrcha le stesse HISTCONTROLlinee del tuo che è morto nel cervello poiché il secondo ha la precedenza sul primo e si presume che i valori siano separati da due punti, non separati da virgola. Se lo fai set -omostra una riga che dice "cronologia attiva"?
In pausa fino a ulteriore avviso.

Vado d'accordo 500con echoentrambe le variabili ehistory on
Jonas il

la seconda istruzione HISTCONTROL è quella che stai ricevendo, non la prima. sebbene ignoreboth sia una scorciatoia bash per ignoredups + ignorespace quindi probabilmente non è questo il problema.
Quack Quixote

1
questo è un duplicato: superuser.com/questions/37576/…
warren

1
@warren: bella scoperta. sono d'accordo, sembra esattamente quello che Sanoj sta chiedendo.
Quack Quixote

Risposte:


6

Puoi usare

history -a

per aggiungere immediatamente la cronologia in memoria al file della cronologia. Una sessione terminale non può vedere quella di un altro a meno che ciò non sia fatto o che l'altro sia uscito.

Puoi usare

history 200 | less

per vedere quel numero di voci.

Oltre a HISTSIZEvedere la voce nella pagina man di Bash relativa HISTFILESIZE.


history -a´ doesn't do anything for me, and not storia 200 | meno`, ma ho aggiornato la mia domanda con maggiori informazioni. Grazie comunque.
Jonas

Penso di aver trovato un motivo ora. La cronologia non viene salvata a meno che non esegua un arresto pulito. Vedi la mia nuova domanda: unix.stackexchange.com/questions/3330/…
Jonas

6

Una volta effettuato il logout, la cronologia viene aggiunta al file ~/.bash_history. Dai un'occhiata qui.

Di default ricorderà i tuoi ultimi 500 comandi. Se vuoi salvare di più imposta la variabile HISTSIZEin ~/.bashrc.

Aggiungo anche ignoredupsa HISTCONTROL(con HISTCONTROL=$HISTCONTROL:ignoredup). In questo modo i comandi consecutivi duplicati possono essere salvati una sola volta.

Dai un'occhiata a man 1 bashcos'altro puoi sintonizzare sulla storia.


Grazie per la tua risposta. Ma non ho un ~/bash_historyfile e no HISTSIZEin ~/.bashrcma ce l'ho HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupsed HISTCONTROL=ignorebothed è Ubuntu Server, se questo è importante.
Jonas

1
@Snoj Notare l' .in ~/.bash_history. E per HISTSIZEquesto utilizzerà solo il valore predefinito di 500 voci.
Benjamin Bannier,

Sì, ma non ho ~/.bash_historyfile sul mio sistema. Prima ls -acontrollavo.
Jonas

@Sanoj Quindi forse non è l'impostazione predefinita. Il nome file è memorizzato nella $HISTFILEvariabile, quindi echo $HISTFILEti dirà dove cercare.
Benjamin Bannier,

echo $HISTFILEmi dà /home/sanoj/.bash_history- strano. Forse non è attivato per motivi di sicurezza?
Jonas

1

la cronologia di bash viene solitamente caricata quando la shell inizia a funzionare e viene salvata quando viene chiusa normalmente. Puoi usare history -ae history -nsovrascrivere questo, ma non automaticamente a meno che tu non abusi $PROMPT_COMMANDo qualcosa di simile.


0

Sanoj, questo dovrebbe davvero "funzionare"; Non credo che ci dovrebbe essere qualcosa di speciale che devi fare per abilitare questo. Sembra che qualcosa stia interferendo con il normale corso degli eventi.

Vorrei cercare in / etc / profile, / etc / bashrc (o forse /etc/bash.bashrc secondo alcune fonti), ~ / .bash_profile, ~ / .bashrc, ~ / .bash_login, ~ / .bash_logout, per vedere se c'è qualcosa che potrebbe influenzare la cronologia (forse grep -i histsu ciascuno dei file sopra).

... In particolare mi chiedo se hai qualcosa in ~ / .bash_logout che rimuove il file.

In alternativa, è possibile che qualcosa abbia la precedenza sulla $HOMEvariabile?

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.