Za svědky fishovi mohu jen doporučit https://fishshell.com/
Hmm, doplnovani pro bash taky je, ale rekl bych, ze neni moc dobre udelane. Obcas poznam, ze je bash completition aktivni, kdyz chci spustit nejaky prikaz s nejakym parametrem (obvykle neco jako ls nebo tar) a tabem se snazim doplnit obycejnou cestu, ktera 100% existuje a ono to nic neukazuje. Tak dam complete -r a pak to jde. Ihned potom odinstaluju bash-completition balik.
Navim, jak je to kvalitni na zfs (kolega to pouziva) nebo v tom fish.
Co si predstavujes pod "upravou promptu" nevim, ale (1) text v promptu jde nastavit v bashi docela dobre, nic mi tam nechybi, mam cas, aktualni cestu, myslim i error code by se dal nastavit, (2) uprava prikazu z historie lze bud primo na radku nebo pomoci fc (fix command) se spusti vybrany editor a muzes editovat, jak bys psal script v souboru.
Updava promptu samozrejme jde i v bashi, je to ale otazka pohodli. Ve fishi s oh'my'fish (nebo zshellu s oh'my'zsh) je to podstatne snadnejsi a jsou predpripravene trebas integrace na git, neni problem si _snadno_ pohrat s barvickami (skvele u navratovych hodnot)...
V bashi se k tomu dopracujes s namahou take... ale s namahou. IMO zbytecnou.
Nemyslim si. Muzem se tu tyden hadat o tom co znamena "s namahou". Nastavit jednoduchou promenou prostredi neni nic sloziteho, a 'snadno' to jde i s temi barvickami, staci jen chtit a precist si pripadne pitomej manual, nebo radu na netu - kdyz nevim jak na to. Stejne se to musis naucit v obou pripadech.
Z meho pohledu jsou integrovane ficury vetsinou spis na obtiz a veci vic komplikuji. Jenze uz jsem to psal - je to veci nazoru.
Zrovna dneska jsem si zkusil náhradu/rozšíření pro práci s historii s názvem hstr: https://github.com/dvorka/hstr
Primárně jde o celoobrazovkový vyhledávač. Zkouším to zatím chvilku. Hlavně se mi líbí vyhledat v historii pomocí více podřetězců. Třeba chci vyhledat příkaz "ssh -i /cesta/ke/klici server". V klasickém inkremenálním vyhledávání bash pomocí Crtl-R, můžu vyhledat ssh nebo server. Ale to mi vyhledá i jiné ssh příkazy, čí jiné akce se server. V hstr (filtrování pomocí keywors), dám vyhledat "ssh serv" a mám to!
Ja muzu doporucit https://github.com/junegunn/fzf. Vypada to dost podobne.
Ano, tohle už používám nějaký pátek a neuvěřitelně mi to zrychlilo práci. Na spoustu věcí se mi nevyplatí dělat alias, protože je nepoužívám tak často a z 1000 aliasů bych si stejně nevzpomněl, že ten který zrovna chci použít. Takže na nejčastější věci mám alias (jako třeba git pull) a na zbytek hstr. Speciálně třeba když se někam připojuji přes ssh a za měsíc vzpomínám, jaká že tam byla ip adresa. Neocenitelné.
Neprepise. Resp. on svoje prikazy do historie zapise, ale bash si historii nacita pri spusteni, takze budes mit vlastni historii do te doby, nez svuj bash ukocis a spustis novy.
To, co popisujes, dela zfs. Asi bych s tim pracovat nedokazal. Nechtelo by se mi hledat moje posledni prikazy po preruseni prace v jednom termu, delani neceho jineho v jinem termu a pak po navratu do puvodniho s novymi prikazy v historii.
Ale obcas si rikam, ze by bylo fajn nejak reloadnout historii a nacist a moci pouzit prikazy z jineho termu. Ale spis jen kdyz o to pozadam. Ted musim ukoncit a spustit xterm nebo tmux okno.
k te puvodni otazce, pri ve vychozim stavu pri ukonceni zapise do souboru historie z pameti radky historie ktere v ni nejsou, tedy opravdu nic neprepisuje...
k tvemu "bylo by fajn", psal sem to nekde kolem, zopaknu, aby kazdy shell zapisoval nove radky rovnou, staci do ~/.bashrc pridat:
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
pokud bys chtel aby co v jednom selu odentrujes si nacetl jinej shell automaticky (coz by delalo spis bordel), muzes pouzit:
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
pokud chces jen na pozadani, tak pustis rucne:
history -a; history -c; history -r
Tak se stydim, protoze obvykle ctu man stranky kompletne cele, ale man bash je proste moooc dlouhej:-), tam jsem uz par veci nacetl (pouzivam treba i page-up/down history-search-backward a history-search-forward pro hledani prikazu po napsani zacatku slova, musi se to ale povolit v inputrc , ale tohle jsem zatim tolik nepotreboval, tak jsem to ani moc nehledal, ale hned si nastuduju help history, vypada to zajimave, to "na pozadani" je presne to, co bych obcas pouzil. Diky!:-)
Historie v bashi je nešťastná, protože ve výchozím nastavení ukládá jen jednu session ze všech, které byly puštěny paralelně, což je pro každodenní práci katastrofa. Navíc mačkat téměř pokaždé Ctrl+R je taky otrava. Za mě můžu jedině doporučit Fish. Ihned po instalaci umí automatické napovídání z historie, výrazně lepší Tab completion a integraci s Gitem. Nic není potřeba konfigurovat, prostě jen zapnout.
Pochopil jsi vubec co ten prikaz dela? On ti casto nezobrazi jen jeden vysledek, ale VSECHNY vyskyty daneho pojmu v historii a to vcetne odpovidajicich id . Tudiz hledam-li nejakou operaci s tarem kterou si pamatuji mlhave a jeste jsem ji delal pred nekolika dny (a ze ja s tarem pracuji docela dost) pouziji tohle.
Ano pouziji grep. a ma to spoustu dalsich vyhod, protoze muzu grep parametrizovat, nebo pouzit egrep a hledat pomoci regularnich vyrazu, atd.... Pri trose snahy se to nauci i male decko a nepotrebuji se spolehat na to ze nekdo napise moloch, ktery mysli za me. Jedna z vyhod Linuxu a fylozofie Unixu, jestli jsi zapomel.
Jak a co dal? Ty jsi necetl ani ten clanek, rovnou tu trolujes? Ve virtualnim terminalu staci pouzit id prikazu - jak to v clanku popisoval Petr (tedy !id). A uz vubec nechapu roc bych ji nemohl pastovat? Ja to v emulatorech terminalu (nejcasteji pouzivam konzoli z KDE) delam naprosto bezne.
Dale nikde jsem nepsal ze to augerechned TAKHLE MUSIS DELAT! Na rozdil od tebe chapu, ze existuji i jini lide majici i jine potreby a zvyky. Je to jen jedna z moznosti jak lze s historii pracovat. Ja jsem mel dodnedavna v notasu elive, ktery (pokud se nepletu) primarne pouzival ZSH a z jeho naseptavace jsem rostl, zatim co kolega na zacatku diskuze si to pochvaloval.
A nakonec - presne jak pise kolega vise: Je to KISS a to me zajima vic nez programy ktery mysly za me, dela si co chce a pry dokonce umi varit i kafe (viz treba naseptavac z ZSH)
Jak muze nekdo adorovat bash (notabene zrovna v Konzoli) a pritom se zaklinat unixovou filosofii? Bash je plny feature-creapu (najdi si seznam bashismu). A spoustu tech "spatnych" veci (interaktivni hledani v historii) dela... jen nepohodlne.
Ale samozrejme pouzivej, co chces a co ti sedi. Jenom netvrd, ze ta volba je najka vic "unixova".
Nechci tvrdit, ze nejaka volba je "vic unixova". To "unixove" je (alespon jak to chapu ja) hlavne styl prace a mysleni, uvazovani.
Vem si, ze i kdyby system vyhledavani v jinem shellu byl sebelepsi a sebepropracovanejsi, ma sve limity a je "zabetonovany" do toho konkretniho shellu. Ja nic tak propracovaneho treba nemam, ale zas mam moznost s tou historii pracovat dale pomoci klasickych linuxovych utilit - a tim se rapidne zvysuji me moznosti. A neplati to jen u historie shellu, ale obecne. Ty pouzivas hotovy produkt a ja stavebnici. Kdo z nas muze pruzneji reagovat na ruzne ci menici se pozadavky?
Bash neni dokonaly, ale me vyhovuje a staci takovy jaky je. Nikdo me nenuti napr. ty Bashismy pouzivat. Je to jen o preferencich a konecne volbe konkretniho jedince. Ja nehajim Bash jako takovy, ale branim se zpochybnovani sveho (lety provereneho) postupu, ktery mi zrovna treba ten Bash umoznil. A navic, jsem to uvedl jen jako doplneni Petrova clanku.
Ano, přesně takle (včetně copy&paste myší) to běžně při interaktivní práci používám. Sice asi ne tak často jako Ctrl+r, ale když mám historii plnou podobných příkazů, nevím, co přesně hledám, nebo chci použít jen část nějakého příkazu z historie, tak se to hodí. Navíc je to mnohem univerzálnější než nějaká sice skvělá fíčura z nějakého lepšího, ale méně rozšířeného shellu (zdaleka ne všude, kde pracuju si můžu nainstalovat co chci, někde to vůbec nejde, občas jsem rád, že tam jsou aspoň ty příkazy history a gnu grep). Celkově mi to přijde jako pěkný příklad unixové filosofie (nástroj dělá jednu věc a dělá ji pořádně) - grepem filtruju výstup jiné příkazu. Naučím se používat grep a nemusím si pamatovat, jak vyhledávat pomocí něčeho dalšího.
Pak to taky rozdistribuj na vsech 150 stroju, ktere pouzivas, nekam i dvakrat (uzivatel, root), zajisti konzistenci pri uprave v budoucnu a nezapomen, ze jinde to fungovat nebude, pripadne to muze delat neco jineho, protoze kolega se v tom vrta taky.
Sam jsem pouzival dost aliasu a funkci, ale toto mne odnaucilo.
Nepisu jak distribuovat. Git je samozrejme reseni. Ale znamena to pri kazdem prihlaseni pull a odhlaseni commit/push. Coz nevim, jestli chci pokazde pri prihlaseni/odhlaseni resit git. A co na to kolegove spravci, kteri jsou zvykli na sve aliasy, ktere se muzou jmenovat stejne?
Toto muze fungovat na strojich, ktere jsou jen v me sprave. Ale pak mi to zase bude chybet na tech ostatnich, takze tu mame urcitou rozpolcenost. Take jsem mel sadu aliasu, to, co pisu, je vlastni zkusenost.
Ignoruj tenhle příkaz
Spouštíte dokola určitou sadu příkazů, která vám pak v historii překáží a vy ji tam nechcete? Bash umí pracovat se seznamem příkazů, které prostě chcete ignorovat. K tomu slouží proměnná HISTIGNORE= uložená opět v .bashrc. Té předáte dvojtečkami oddělený seznam příkazů, které do historie ukládat nechcete.
HISTIGNORE=ls:history:pwd
A pokud nechcete aby se neukladaly ani prikazy s parametrama napr history -c, df -h ....
Tak pridate hvezdicky:
HISTIGNORE=ls*:history*:df*:free*cd*