24Aug
Bash shell je štandardné terminálové prostredie, ktoré je súčasťou väčšiny linuxových distribúcií, je súčasťou systému MacOS a je k dispozícii pre inštaláciu v systéme Windows 10. Pamätá si zadávané príkazy a ukladá ich do súboru s históriou. Pravdepodobne viete niekoľko základov histórie bash, ale je to oveľa silnejšie, ako by ste si mohli uvedomiť.Klávesové skratky
Ak chcete prechádzať históriou bash, môžete použiť niekoľko užitočných klávesových skratiek na bash. Stlačte tieto skratky a príkazy, ktoré ste predtým používali, sa objavia na výzve.
- Šípka nahor alebo Ctrl + P : Prejdite na predchádzajúci príkaz v histórii. Stlačte niekoľkokrát tlačidlo, aby ste mohli prechádzať pomocou príkazov, ktoré ste použili.
- Šípka dole alebo Ctrl + N : Prejdite na ďalší príkaz v histórii. Stlačte tlačidlo viackrát, aby ste prešli dopredu pomocou príkazov, ktoré ste použili.
- Alt + R : Vráťte všetky zmeny príkazu, ktorý ste vybrali z histórie, ak ste ho upravili na aktuálnom riadku.
Bash má tiež špeciálny režim "recall", ktorý môžete použiť na vyhľadávanie predtým spustených príkazov, skôr než ich posúvať jeden po druhom.
- Ctrl + R : Vyvolajte posledný príkaz zodpovedajúci zadaným znakom. Stlačte túto skratku a začnite písať pre vyhľadanie histórie bash pre príkaz.
- Ctrl + O : Spustite príkaz, ktorý ste našli pomocou klávesov Ctrl + R.
- Ctrl + G : Nechajte režim vyhľadávania histórie bez spustenia príkazu.
Zobrazenie histórie basov
Históriu bash môžete vytlačiť na obrazovku spustením jediného príkazu: História
Uvidíte zoznam všetkých príkazov v histórii bash spolu s číslom vľavo od každého. Príkaz s "1" vedľa neho je najstarším príkazom v histórii bash, zatiaľ čo príkaz s najvyšším číslom je posledný príkaz.
Pomocou výstupu môžete urobiť všetko, čo sa vám páči. Napríklad, môžete ho pridať na grepcommand a vyhľadať históriu príkazov. História
grep your_searchMôžete tiež pripevniť k zadanému príkazu, aby ste mohli zobraziť len malý počet posledných spustených príkazov. Napríklad nasledujúci príkaz zobrazí posledné 5 položiek v histórii. História
tail -5Spustiť príkazy z histórie
Bash môže rýchlo "rozšíriť" predchádzajúce príkazy alebo ich rozbaliť a modifikovať.Táto funkcia je známa ako "rozšírenie histórie" a používa výkričník, známy ako "bang".Jednoducho ich napíšte na výzvu a stlačte Enter, aby ste ich spustili, ako keby ste spustili iný príkaz.
Ak chcete spustiť konkrétny príkaz z vašej histórie podľa jeho čísla, použite nasledovný príkaz:
! #Povedzme napríklad, že ste chceli spustiť 12. príkaz z vašej histórie bash. To je príkaz s "12" naľavo od neho, keď spustíte príkaz histórie. Zadáte nasledujúci príkaz.
! 12Ak chcete znova spustiť posledný spustený príkaz, zadajte nasledovné.To má rovnaký účinok ako stlačenie raz šípky hore, čím zobrazíte predchádzajúci príkaz a potom stlačíte kláves Enter.
! !Môžete tiež použiť príkaz na zadanie určitého počtu riadkov. Napríklad! -2 by spustil druhý na posledný príkaz, ktorý ste spustili.!!znamená to isté ako! -1.
Toto rozšírenie funguje kdekoľvek na linke. Môžete pridať čokoľvek, čo sa vám páči pred alebo po!alebo akýkoľvek iný výraz v tejto časti. Napríklad môžete zadať nasledujúci príkaz na spustenie posledného príkazu, ktorý ste prešli cez sudo a dávať mu oprávnenia root. To je obzvlášť užitočné, ak zabudnete pridať sudo pred spustením príkazu.
sudo! !Alebo napríklad môžete znova spustiť predchádzajúci príkaz a potrubie jeho výstup do grep na hľadanie nejakého textu.
! !|grep textAk chcete vyhľadať príkaz v histórii a spustiť ho, zadajte nasledovné.Spustí sa posledný príkaz, ktorý zodpovedá zadanému textu:
! TextAk ste nedávno spustili príkaz, ktorý začal pingom, môžete spustiť nasledujúci príkaz na jeho vyhľadanie. Toto vyhľadá históriu späť, nájde najnovší príkaz začínajúci na "pi" a okamžite ho spustite:
! PiMôžete pridať: p ku ktorejkoľvek z vyššie uvedených rozšírení a bash vytlačí príkaz do terminálu bez jeho spustenia. Toto je užitočné, ak chcete potvrdiť, že vyberáte správny príkaz skôr, než ho spustíte.
! 12: p! !: p! Text: pOpätovné použitie argumentov z histórie
Bash tiež umožňuje spustiť nový príkaz, ale používa argumenty z predchádzajúcich príkazov vo vašej histórii. To vám môže pomôcť rýchlo opätovne použiť dlhé alebo zložité argumenty bez toho, aby ste ich museli opätovne zadávať.Príkaz
$Napríklad povedzme, že ste spustili príkaz dotyk /home/chris/ some_long_file_name_you_dont_want_to_type_again. Teraz chcete spustiť príkaz nano /home/chris/ some_long_file_name_you_dont_want_to_type_again. Skôr než zadáte celú vec od začiatku, môžete spustiť:
nano! $!! $ By bash automaticky vyplnil posledný argument z predchádzajúceho príkazu.
Toto iba vyplní posledný argument. Takže, ak spustíte ping google.com -c 4 a potom spustite ping! $, Toto by sa jednoducho rozšírilo na "ping 4".
Ak chcete túto situáciu opraviť, použite nasledujúci trik na rozbalenie prvého argumentu na riadku a nie na posledný príkaz:
! ^Ak ste spustili ping google.com -c 4 a potom spustili ping! ^,bash by rozšírilo toto na "ping google.com"
Ak chcete vyplniť všetky argumenty použité v predchádzajúcom príkaze namiesto jediného argumentu, použite nasledovné:
príkaz! *Takže ak ste spustili ping!* namiesto toho bash automaticky vyplní všetky argumenty, ktoré ste použili v predchádzajúcom príkaze
Môžete použiť rovnaký trik, ktorý používate na spustenie príkazov z vašej histórie, aby ste dostali od nich argumenty Použite nasledujúci formulár
príkaz! abc:#Napríklad sme spustili príkaz sudo názov hostiteľa ubuntu skôr. Ak sme spustili nasledujúci príkaz, bash bude hľadať späť cez históriu nájsť posledný príkaz začína písmenami, ktoré zadávame a vyplniť argument sme určili. Takže, akspúšťame echo! su: 2, bash hľadať späť nájsť posledný príkaz začínajúci "su" a vyplniť jeho druhý argument, ktorý je "ubuntu".
Ďalšie triky pracujú, ako by ste mohli očakávať.Napríklad nahradenie čísla hviezdičkou, známej ako zástupný znak, spôsobuje, že bash vyplní všetky príkazy z príkazu:
príkaz! Abc: *Prerušiť predchádzajúci príkaz a upraviť ho
Bash tiež umožňuje opakovať predchádzajúci príkaza zadajte niečo, čo by sa malo zmeniť.To môže byť užitočné pre opravu preklepu v príkaze. Napríklad nasledujúci príkaz opätovne spustí predchádzajúci príkaz a nahradí ho textom "abc" textom "xyz".
^ abc ^ xyzNapríklad, ak ste omylom spustili ping gogle.com, mohli by ste spustiť ^ gog ^ goog a bash spustil príkaz ping google.com.
Kde je uložená vaša história a ako ju vyčistiť
Balík bash ukladá históriu príkazov, ktoré ste spustili do súboru histórie používateľského účtu na ~ /. bash_history ako predvolené.Napríklad, ak je vaše užívateľské meno bob, tento súbor nájdete v /home/bob/. bash_history.
Pretože vaša história je uložená v súbore, pretrváva medzi reláciami. Môžete spustiť niektoré príkazy, odhlásiť sa, vrátiť sa nasledujúci deň a tieto príkazy budú stále v súbore histórie pripravené na zobrazenie a použitie. Každý používateľský účet má vlastný súbor histórie so samostatnou históriou príkazov.
Ak chcete vymazať históriu bash, môžete spustiť nasledujúci príkaz. Týmto sa vymaže obsah súboru. bash_history vášho účtu: História
-cBash si len pamätá obmedzený počet príkazov ako predvolený, čím zabraňuje príliš veľkému súboru histórie. Počet pamäťových záznamov, ktoré si pamätajú, je riadený pomocou HISTSIZEvariable. Predvolená hodnota je zvyčajne 500 alebo 1000 položiek. Môžete spustiť nasledujúci príkaz na zobrazenie veľkosti histórie bash vo vašom systéme.
echo $ HISTSIZEAk chcete nastaviť históriu na nulu, spustite nasledujúci príkaz.
HISTSIZE = 0V prípade aktuálnej relácie bash neuloží žiadne záznamy histórie, pokiaľ nespustí príkaz ako HISTSIZE = 1000, aby ho nastavil späť na určitý počet záznamov.
Ako ignorovať medzery a duplikáty
Bash umožňuje ignorovať záznamy histórie, ktoré začínajú medzerou, ak nastavíte hodnotu HISTCONTROLvariable na ignorespace.
HISTCONTROL = ignorespacePred zadaním príkazu zadajte medzeru pred jeho spustením v balíku bash a príkaz beží normálne, ale v histórii sa nezobrazí, ak máte povolenú túto premennú.To vám umožní udržať históriu trochu čistejšie a zvoliť si príkazy bez toho, aby sa zobrazovali vo vašej histórii.
Bash tiež umožňuje ignorovať duplicitné príkazy, ktoré môžu prekonať vašu históriu. Ak to chcete urobiť, nastavte HISTCONTROL na ignoredups.
HISTCONTROL = ignoredupsAk chcete použiť funkciu ignorespace aj ignoredups, nastavte premennú HISTCONTROL na ignoreboth.
HISTCONTROL = ignorebothVšimnite si, že nastavené premenné bash budú pre aktuálnu reláciu pretrvávať.Budete ich musieť pridať do súboru. bashrc svojho používateľského konta, aby ste tieto hodnoty automaticky nastavili v každej začiatku relácie bash, ak to chcete.
Bash shell je komplexný nástroj s mnohými možnosťami ako je tento. Prečítajte si sekcie Bash History Builtins a History Expansion v oficiálnej príručke bash podrobnejšie informácie a ďalšie pokročilé triky, ktoré môžete použiť.