GNU/Linux >> Znalost Linux >  >> Linux

Jak na to:Neomezená historie Bash/shell?

Přidejte toto k vašemu .bashrc (Linux) nebo .bash_profile (MacOS):

export HISTFILESIZE=
export HISTSIZE=

Tady to je, neomezená historie. Aktuálně mám 27000 záznamů :)

Od man bash :

Pokud HISTFILESIZE není nastaveno, neprovádí se žádné zkrácení.

To znamená .bash_history není nikdy zkrácen

Zdá se, že totéž platí pro HISTSIZE , i když jsem to nenašel zdokumentované.

Další skvělá funkce, kterou vyzkouším, je tato:

Pokud HISTTIMEFORMAT Pokud je nastavena proměnná, časová razítka se zapisují do souboru historie, označují se znakem komentáře historie, takže mohou být zachovány během relací shellu, jako je následující:

export HISTTIMEFORMAT="%F %T "

Dejte mi vědět, jestli jste to už zkusili...


(opětovné zveřejnění mé odpovědi z https://stackoverflow.com/a/19533853/128597)

Po mnoha velkých, ošklivých iteracích a podivných okrajových případech v průběhu let mám nyní stručnou část mého .bashrc věnovanou tomuto.

Nejprve musíte okomentovat nebo odstranit tuto sekci vašeho .bashrc (výchozí pro Ubuntu). Pokud ne, pak některá prostředí (například spuštění screen sessions) stále zkrátí vaši historii:

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

Za druhé, přidejte toto na konec vašeho .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"

Poznámka:každý příkaz je zapsán okamžitě po jeho spuštění, takže pokud omylem vložíte heslo, nemůžete jen "zabít -9 %%", abyste se vyhnuli zápisu historie, budete ho muset odstranit ručně.

Také si uvědomte, že každá bash session načte do paměti celý soubor historie, ale i když váš soubor historie naroste na 10 MB (což bude trvat dlouho, dlouho čas) nezaznamenáte příliš velký vliv na dobu spuštění bash.


Zahrnout do ~/.bashrc :

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

Tato odpověď splňuje následující kritéria:

  1. samostatná hlavní historie (žádná relace nemůže přerušit vaši historii)

  2. automatický zápis historie (bez klávesových zkratek)

  3. občasné zápisy (bez připojení po každém příkazu)

pozadí

Při interaktivním spuštění, pokud $HISTFILESIZE je nastaven na číslo, bash zkrátí $HISTFILE k tomu číslu. Při interaktivním zavření, pokud je volba shellu histappend je nastaven, bash připojí $HISTSIZE řádků na $HISTFILE , jinak přepíše $HISTFILE .

tipy pro OSX (terminál)

Při každém vytvoření karty v Terminálu ~/.bash_profile je načteno, což znamená, že bash nepřečte váš ~/.bashrc . Přidejte následující řádek do ~/etc/bash_profile :

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

tipy pro obrazovku

Pokud používáte screen, váš konfigurační soubor je ~/.screenrc. Pokud chcete, aby obrazovka zaznamenávala historii, stačí ji nastavit tak, aby používala přihlašovací shell, který bude zdrojem vašich spouštěcích souborů bash (a zaznamená vaši historii).

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

Linux
  1. Jak nechat typ-ahead použít pro vyhledávání v historii Bash (ctrl-r)?

  2. Zkažená historie?

  3. Jak změnit Cron Shell (sh to Bash)?

  1. Jak zopakovat nový řádek ve skriptech Bash Shell

  2. Jak zahrnout soubor do skriptu bash shell

  3. Jak grepovat část souboru v bash shellu

  1. Jak používat příkazy historie Bash

  2. Jak vymazat historii příkazového řádku BASH v Linuxu

  3. Jak Bash ví, jak je vyvoláván?