Část bash historie občas záhadně zmizí

Část bash historie občas záhadně zmizí
« kdy: 02. 04. 2024, 17:29:11 »
Ahoj všem. Nastavil jsem si nekonečnou bash history podle návodu na webu https://www.soberkoder.com/unlimited-bash-history/ a na první pohled to vypadalo že se historie spuštěných příkazů ukládá tak jak má. Bohužel jsem po čase zjistil že mi ze souboru .history/.bash_history občas zmizí několik stovek příkazů. Níže je moje nastavení historie v .bashrc (zkráceno):

Kód: [Vybrat]
shopt -s histappend

export HISTFILESIZE=-1
export HISTSIZE=-1
export HISTFILE=~/.history

export HISTTIMEFORMAT="[%F %T] "
export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
export HISTCONTROL=ignoredups

Po každém spuštěném příkazu by se měla historie uložit (histappend) díky nastavení v proměnné PROMPT_COMMAND. Jako emulátor terminálu používám Tilix ve kterém běží bash 5.1.16 (Ubuntu 22.04 LTS). V Tilix profilu je nastaveno "Run command as login shell".

Netuší někdo čím by tohle chování mohlo být způsobeno? Případně jaká další nastavení bych mohl zkontrolovat?

Předem všem děkuji za reakce.


Re:Část bash historie občas záhadně zmizí
« Odpověď #1 kdy: 02. 04. 2024, 17:47:29 »
Není to tím, že bash běží ve více instancích? Nevím, jestli to je normální či není, ale minimálně mně se uloží do historie vždy jen historie posledního ukončeného procesu (čili obvykle posledního zavřeného terminálu). Nemůže to být totéž?

Re:Část bash historie občas záhadně zmizí
« Odpověď #2 kdy: 02. 04. 2024, 19:01:08 »
Je to tak. Bash má historii v paměti a po ukončení ji zapíše do .bash_history. Tím pádem tam bude historie z toho posledního.

Ono to jde nastavit, aby se to tam zapisovalo hned, tím tam budou sice všechny příkazy, ale míchá se to mezi více shelly, takže když děláte v jednom něco a v druhém něco jiného, tak se to bude motat. Takže jsem to měl jen chvilku, nezvyk jsem si a zrušil jsem to.

Re:Část bash historie občas záhadně zmizí
« Odpověď #3 kdy: 02. 04. 2024, 19:23:53 »
Klasickou bash historii používám pouze na šipku nahoru (nedávno provedené příkazy). Na dlouhodobější historii jsem si nainstaloval Atuin, který mám nabindovaný na Ctrl+R. Dá se v tom hezky vyhledávat a nic se neztrácí. V ~/.config/atuin/config.toml mám nastaveno
Kód: [Vybrat]
enter_accept = false, abych ještě příkaz mohl po potvrzení entrem upravit. V ~/.bashrc jsem upravil
Kód: [Vybrat]
atuin init bash na
Kód: [Vybrat]
atuin init bash --disable-up-arrow, tím se zachová normální funkce šipky nahoru.

Re:Část bash historie občas záhadně zmizí
« Odpověď #4 kdy: 02. 04. 2024, 20:30:49 »
Je to tak. Bash má historii v paměti a po ukončení ji zapíše do .bash_history. Tím pádem tam bude historie z toho posledního.

Ono to jde nastavit, aby se to tam zapisovalo hned, tím tam budou sice všechny příkazy, ale míchá se to mezi více shelly, takže když děláte v jednom něco a v druhém něco jiného, tak se to bude motat. Takže jsem to měl jen chvilku, nezvyk jsem si a zrušil jsem to.

To si právě myslím že mám nastaveno tím history -a, což by měl měl být append history dané bash session, po spuštění příkazu se příkaz ihned objeví v .history souboru:
Kód: [Vybrat]
export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
« Poslední změna: 02. 04. 2024, 20:32:29 od byl_jsem_donucen_se_registrovat »


Zopper

  • *****
  • 781
    • Zobrazit profil
Re:Část bash historie občas záhadně zmizí
« Odpověď #5 kdy: 02. 04. 2024, 20:50:54 »
Zkus přijít na replikační scénář. Ten config vypadá na první pohled ok, histappend tam máš taky... Třeba ten problém není s více terminály najednou, ale s něčím jiným.

Re:Část bash historie občas záhadně zmizí
« Odpověď #6 kdy: 02. 04. 2024, 21:19:09 »
Je to tak. Bash má historii v paměti a po ukončení ji zapíše do .bash_history. Tím pádem tam bude historie z toho posledního.

Ono to jde nastavit, aby se to tam zapisovalo hned, tím tam budou sice všechny příkazy, ale míchá se to mezi více shelly, takže když děláte v jednom něco a v druhém něco jiného, tak se to bude motat. Takže jsem to měl jen chvilku, nezvyk jsem si a zrušil jsem to.

To si právě myslím že mám nastaveno tím history -a, což by měl měl být append history dané bash session, po spuštění příkazu se příkaz ihned objeví v .history souboru:
Kód: [Vybrat]
export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

Ano, tak nějak to bylo. Ale jestli si pamatuju dobře, tak to stejně úplně nefungovalo - nebralo to všechno. Navíc nejde pak intuitivně používat šipka nahoru v jednotlivých terminálech, jak se to míchá vše dohromady. Tak jsem to vypnul.

Re:Část bash historie občas záhadně zmizí
« Odpověď #7 kdy: 02. 04. 2024, 22:38:20 »
Je to tak. Bash má historii v paměti a po ukončení ji zapíše do .bash_history. Tím pádem tam bude historie z toho posledního.

Ono to jde nastavit, aby se to tam zapisovalo hned, tím tam budou sice všechny příkazy, ale míchá se to mezi více shelly, takže když děláte v jednom něco a v druhém něco jiného, tak se to bude motat. Takže jsem to měl jen chvilku, nezvyk jsem si a zrušil jsem to.

To si právě myslím že mám nastaveno tím history -a, což by měl měl být append history dané bash session, po spuštění příkazu se příkaz ihned objeví v .history souboru:
Kód: [Vybrat]
export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

Ano, tak nějak to bylo. Ale jestli si pamatuju dobře, tak to stejně úplně nefungovalo - nebralo to všechno. Navíc nejde pak intuitivně používat šipka nahoru v jednotlivých terminálech, jak se to míchá vše dohromady. Tak jsem to vypnul.

Takhle "hloupě" se to chová při nastavení
Kód: [Vybrat]
export PROMPT_COMMAND="histrory -a;history -c; history -r;$PROMPT_COMMAND"
  • history -c clears the in-memory history
  • history -r appends the contents history file to the in-memory history

Jelikož používám ext4 tak jsem zkusil nastavit soubor s historií tak aby se do něj dal dělat pouze append, třeba mi to pomůže:
Kód: [Vybrat]
chattr +a .history

Re:Část bash historie občas záhadně zmizí
« Odpověď #8 kdy: 03. 04. 2024, 08:08:14 »
Klasickou bash historii používám pouze na šipku nahoru (nedávno provedené příkazy). Na dlouhodobější historii jsem si nainstaloval Atuin, který mám nabindovaný na Ctrl+R. Dá se v tom hezky vyhledávat a nic se neztrácí. V ~/.config/atuin/config.toml mám nastaveno
Kód: [Vybrat]
enter_accept = false, abych ještě příkaz mohl po potvrzení entrem upravit. V ~/.bashrc jsem upravil
Kód: [Vybrat]
atuin init bash na
Kód: [Vybrat]
atuin init bash --disable-up-arrow, tím se zachová normální funkce šipky nahoru.

Atuin vypadá dobře, možná vyzkouším, neznal jsem, díky.

luvar

  • ***
  • 239
    • Zobrazit profil
    • E-mail
Re:Část bash historie občas záhadně zmizí
« Odpověď #9 kdy: 03. 04. 2024, 17:39:13 »
Prispejem jednym skvostom: per-directory-history pre zsh - https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/per-directory-history

Pouzívam oh my zsh a plugin per-directory-history (a asi este git plugin) a po stipke zvykania som si zvykol a nemenim.

Prax: kazdy adresar ma vlastnu historiu a je dostupna klasicky sipkou hore a skratkou ctrl+r pre hľadanie. Kedykoľvek stlačím ctrl+g, tak sa prepnem do "global history" a vyhľadávam v histórii všetkých adresárov...

PS: Vďaka tomuto si niekedy vytváram aj prázdne adresáre v ~/tmp adresári, ktoré slúžia ako "projekt" pre niečo. Napríklad, keď si chcem spustiť nejaký docker kontajner a pohrať sa s ním jednorazovo. Takto sa viem vrátiť k experimentu neskôr.