GNU/Linux >> Linux Esercitazione >  >> Linux

Procedura:cronologia Bash/shell illimitata?

Aggiungi questo al tuo .bashrc (Linux) o .bash_profile (Mac OS):

export HISTFILESIZE=
export HISTSIZE=

Ecco qua, storia illimitata. Attualmente ho 27000 voci :)

Da man bash :

Se HISTFILESIZE non è impostato, non viene eseguito alcun troncamento.

Ciò significa .bash_history non viene mai troncato

Lo stesso sembra valere anche per HISTSIZE , anche se non sono riuscito a trovarlo documentato.

Un'altra bella funzionalità che proverò è questa:

Se HISTTIMEFORMAT variabile è impostata, i timestamp vengono scritti nel file della cronologia, contrassegnati con il carattere del commento della cronologia, in modo che possano essere conservati tra le sessioni della shell, come il seguente:

export HISTTIMEFORMAT="%F %T "

Fammi sapere se l'hai già provato...


(ripubblicando la mia risposta da https://stackoverflow.com/a/19533853/128597)

Dopo molte grandi e brutte iterazioni e strani casi limite nel corso degli anni, ora ho una sezione concisa del mio .bashrc dedicata a questo.

Innanzitutto, devi commentare o rimuovere questa sezione del tuo .bashrc (impostazione predefinita per Ubuntu). In caso contrario, alcuni ambienti (come l'esecuzione di screen sessioni) troncheranno comunque la tua cronologia:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

Secondo, aggiungi questo in fondo al tuo .bashrc:

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

Nota:ogni comando viene scritto immediatamente dopo essere stato eseguito, quindi se incolli accidentalmente una password non puoi semplicemente "uccidere -9 %%" per evitare la scrittura della cronologia, dovrai rimuoverla manualmente.

Si noti inoltre che ogni sessione bash caricherà in memoria l'intero file della cronologia, ma anche se il file della cronologia cresce fino a 10 MB (il che richiederà un lungo, lungo time) non noterai un grande effetto sul tempo di avvio di bash.


Includi in ~/.bashrc :

# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=

Questa risposta soddisfa i seguenti criteri:

  1. una cronologia principale separata (nessuna sessione può interrompere la tua cronologia)

  2. scrittura automatica della cronologia (senza tasti di scelta rapida)

  3. scritture poco frequenti (nessuna aggiunta dopo ogni comando)

sfondo

All'avvio interattivo, se $HISTFILESIZE è impostato su un numero, bash tronca $HISTFILE a quel numero. Alla chiusura interattiva, se l'opzione shell histappend è impostato, bash aggiunge $HISTSIZE righe fino a $HISTFILE , altrimenti sovrascrive $HISTFILE .

suggerimenti per OSX (terminale)

Ogni volta che viene creata una scheda in Terminale, ~/.bash_profile viene letto, il che significa che bash non continua a leggere il tuo ~/.bashrc . Aggiungi la seguente riga al tuo ~/etc/bash_profile :

# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc

suggerimenti per lo schermo

Se usi screen, il tuo file di configurazione è ~/.screenrc. Se vuoi che lo schermo registri la cronologia, devi solo impostarlo in modo da utilizzare una shell di login che genererà i tuoi file di avvio di bash (e registrerà la tua cronologia).

# use bash, make it a login shell
defshell -bash

Linux
  1. Come fa Bash a sapere come viene invocato?

  2. Come applicare la digitazione preliminare alla ricerca nella cronologia di Bash (ctrl-r)?

  3. Storia storpiata?

  4. Come cambiare Cron Shell (sh To Bash)?

  5. Come fare eco a una nuova riga negli script di Bash Shell

Come abilitare il timestamp nella cronologia di Bash in Linux

Come utilizzare il comando Declare in Linux Bash Shell

Come installare Linux Bash Shell su Windows 10

Come verificare se esiste un file o una directory in Bash Shell

Come cancellare la cronologia di Bash in Linux e Mac

Come utilizzare Linux Bash Shell in Windows 10?