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:
-
samostatná hlavní historie (žádná relace nemůže přerušit vaši historii)
-
automatický zápis historie (bez klávesových zkratek)
-
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