pondělí 8. srpna 2011

Bash - synchronizace historie mezi terminály

Máte otevřeno více terminálů a rádi byste v jednom spustili příkaz, o kterém víte, že jste ho použili v terminálu jiném. Každé sezení Bashe má ve výchozím nastavení (nejen) Ubuntu historii vlastní, která se ukládá až při jeho ukončení. Občas se hodí nějakou tu historii mezi terminály sdílet, nebo zajímavou historii uložit, protože pokud vám běží terminál třeba měsíc v kuse a pak kvůli výpadku proudu, nebo selhání grafického ovladače klekne bez uložení, můžete přijít o cenné kousky kódu (matlali jste je podle manuálu půl hodiny..), které jste z blbosti hned nearchivovali. Popíšu tedy nějaké ty možnosti, o kterých vím...


Při požadavku na použití historie jiného terminálu, můžete v jednom terminálu historii uložit:

history -a

a v druhém načíst:

history -n

Přepínač -a přidá nové řádky k souboru historie, jehož nastavení jsem již popisoval dříve. Přepínač -w by soubor historie přepsal. 
Přepínač -n přidá nové řádky ze souboru historie k historii aktuálního terminálu. Naopak přepínač -r vezme uloženou historii a přepíše jí historii aktuálního terminálu.

Píšu terminálu, ale správněji bych měl psát sezení Bashe..

Pokud by vám přišlo výhodné, aby se historie ukládala okamžitě po provedení příkazu, můžete si nastavit proměnnou prostředí $PROMPT_COMMAND. V Ubuntu standardně nastavená není a tak můžete do svého ~/.bashrc přidat řádek:

export PROMPT_COMMAND="history -a"

Pokud byste chtěli jen modifikovat předchozí nastavení, můžete zapsat.. V každém případě můžete zapsat:

export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

Od této chvíle se bude každý nově otevřený terminál chovat tak, jak jsem předeslal - po provedení každého příkazu se při zobrazení nového promptu současně uloží historie. Stále ještě mají jednotlivé terminály historii vlastní, pouze se průběžně ukládá do centrální historie na disku a nově otevřený terminál si už načte mix historie všech terminálů, nejen ukončených, ale i těch aktuálně běžících.

Máte-li pocit, že historie je sdílena stále ještě málo, máte možnost do $PROMPT_COMMAND přidat i výše uvedený příkaz pro doplnění historie ze souboru a tím se bude historie nejen ukládat, ale i aktualizovat s každým novým promptem - tedy po provedení každého dalšího příkazu.

export PROMPT_COMMAND="history -a; history -n; $PROMPT_COMMAND"

Také si můžete v ~/.bashrc pro příkazy history -a a history -n definovat aliasy, aby se lépe používaly.



Žádné komentáře:

Okomentovat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.