24Aug
Bash shell je standardní terminálové prostředí, které je součástí většiny distribucí Linuxu a je součástí softwaru macOS a je k dispozici pro instalaci v systému Windows 10. Vzpomíná si na zadané příkazy a ukládá je do souboru historie. Pravděpodobně znáte několik základů historie bash, ale je to mnohem silnější, než byste si mohli uvědomit. Klávesové zkratky
Chcete-li procházet historii bash, můžete použít několik užitečných klávesových zkratek, které používají bash. Stiskněte klávesové zkratky a příkazy, které jste použili dříve, se objeví na výzvě.
- Šipka nahoru nebo Ctrl + P : Přejděte na předchozí příkaz ve své historii. Několikrát stiskněte tlačítko pro přechod zpět pomocí příkazů, které jste použili.
- šipka dolů nebo Ctrl + N : Přejděte na další příkaz ve své historii. Několikrát stiskněte klávesu, abyste mohli procházet dopředu pomocí příkazů, které jste použili.
- Alt + R : Vrátit všechny změny příkazu, který jste vybrali z historie, pokud jste jej upravili na aktuálním řádku.
Bash má také speciální režim "Recall", který můžete použít k hledání příkazů, které jste dříve spustili, než aby je procházeli jeden po druhém.
- Ctrl + R : Vyvolání posledního příkazu, který odpovídá zadaným znakům. Stiskněte tuto zkratku a začněte psát prohledávání historie bash pro příkaz.
- Ctrl + O : Spusťte příkaz, který jste našli pomocí kláves Ctrl + R.
- Ctrl + G : Nechte režim hledání historie bez spuštění příkazu.
Zobrazení historie basů
Můžete vytisknout celou historii bash na obrazovku tím, že spustíte jediný příkaz:
historyZobrazí se seznam všech příkazů ve vaší historii bash spolu s číslem vlevo od každého. Příkaz s "1" vedle něj je nejstarším příkazem ve vaší historii bash, zatímco příkaz s nejvyšším číslem je poslední.
Pomocí výstupu můžete udělat vše, co se vám líbí.Například byste jej mohli přivést k příkazu grepcommand a vyhledat historii příkazů.Historie
grep your_searchDalo by se také připojit k příkazu tail pro zobrazení pouze malého počtu posledních příkazů, které jste spustili. Například následující příkaz zobrazí poslední 5 položek ve vaší historii. Historie
tail -5Spuštění příkazů z historie
Bash může rychle rozbalit předchozí příkazy nebo je rozbalit a modifikovat. Tato funkce je známá jako "rozšíření historie" a používá vykřičník známý jako "bang".Stačí je zadejte na výzvu a stisknutím klávesy Enter spusťte je, jako byste spustili jiný příkaz.
Chcete-li spustit konkrétní příkaz z vaší historie podle jeho čísla, použijte následující příkaz:
! #Řekněme například, že chcete spustit 12. příkaz z vaší historie bash. To je příkaz s "12" nalevo od něj, když spustíte příkaz historie. Zadáte následující příkaz.
! 12Chcete-li znovu spustit poslední příkaz, který jste spustili, zadejte následující.To má stejný efekt jako stisknutí šipky Nahoru k zobrazení předchozího příkazu a poté stisknutím klávesy Enter.
! !K příkazu můžete také zadat určitý počet řádků zpět. Například, -2 by spustil druhý až poslední příkaz, který jste spustili.!!znamená to samé! -1.
Tato rozšíření funguje kdekoli na trati. Můžete přidat vše, co se vám líbí před nebo po!nebo některý z dalších výrazů v této části. Například můžete zadat následující příkaz, abyste znovu spustili poslední příkaz, který jste spustili pomocí sudo a dali mu oprávnění root. To je zvláště užitečné, pokud zapomenete přidat sudo před spuštěním příkazu.
sudo! !Můžete například spustit předchozí příkaz a potrubí jeho výstup do grep pro hledání nějakého textu.
! !|grep textChcete-li vyhledat příkaz ve své historii a spustit jej, zadejte následující.Toto provede poslední příkaz, který odpovídá zadanému textu:
! TextPokud jste tedy nedávno spustili příkaz, který začal příkazem ping, můžete spustit následující příkaz a vyhledat jej. Budete vyhledávat zpět svou historii, najděte nejnovější příkaz, který začíná písmenem "pi" a okamžitě jej spusťte:
! PiK některému z výše uvedených rozšíření můžete připojit: p a příkaz bash vytiskne příkaz k terminálu bez jeho spuštění.To je užitečné, pokud chcete potvrdit, že vybíráte správný příkaz před jeho spuštěním.
! 12: p! !: p! Text: pOpětovné použití argumentů z historie
Bash také umožňuje spustit nový příkaz, ale použít argumenty z předchozích příkazů ve vaší historii. To vám může pomoci rychle opakovat dlouhé nebo složité argumenty, aniž byste je museli opakovat. Příkaz
$Řekněme například, že jste spustili příkaz dotykem /home/chris/ some_long_file_name_you_dont_want_to_type_again. Nyní chcete spustit příkaz nano /home/chris/ some_long_file_name_you_dont_want_to_type_again. Spíše než zadat celou věc od začátku, můžete spustit:
nano! $!! $ By bash automaticky vyplnil poslední argument z předchozího příkazu.
Toto vyplňuje pouze poslední argument. Takže pokud spustíte ping google.com -c 4 a pak spustíte ping! $, Bude to pouze rozšířit na "ping 4".
Chcete-li tuto situaci vyřešit, můžete použít první trik pro rozbalení prvního argumentu na řádku než příkazu
! ^Pokud jste spustili ping google.com -c 4 a poté spustili ping! ^,bash by to rozšířil na "ping google.com".
Pro vyplnění všech argumentů použitých v předchozím příkazu namísto jediného argumentu byste použili následující příkaz:
! *Takže pokud jste spustili ping!* místo toho by bash automaticky vyplnil všechny argumenty, které jste použili v předchozím příkazu
Můžete použít stejný trik, který používáte k spouštění příkazů z historie, abyste získali argumenty od nich: Použijte následující formulář:
command! abc:#Spustili jsme například příkaz sudo hostname ubuntu dříve. Pokud spustíme následující příkaz, bash prohledá zpět historii a najde poslední příkaz začínající písmeny, které zadáváme, a vyplní argument, který specifikujeme.běžíme echo! su: 2, bash se vrátí zpět a najde poslední příkaz začínající "su" a vyplní druhý argument, který je "ubuntu".
Další triky fungují, jak byste mohli očekávat. Například nahrazení čísla hvězdičkou, známou jako zástupný znak, způsobuje, že bash vyplní všechny argumenty z příkazu:
příkaz! Abc: *Převede předchozí příkaz a upraví jej
Bash také umožňuje znovu spustit předchozí příkaza specifikujte něco, co by mělo být změněno. To může být užitečné pro opravu překlepu v příkazu. Například následující příkaz znovu provede předchozí příkaz a nahrazuje text "abc" v něm s textem "xyz".
^ abc ^ xyzNapříklad, pokud jste náhodně spustili ping gogle.com, mohli byste spustit ^ gog ^ goog a bash spustil příkaz ping google.com.
Kde je uložena vaše historie a jak ji vymazat
Složka bash ukládá historii příkazů, které jste spustili do souboru historie uživatelského účtu ve výchozím nastavení ~ /. bash_history. Pokud je například vaše uživatelské jméno bob, tento soubor najdete na adrese /home/bob/. bash_history.
Protože je vaše historie uložena v souboru, přetrvává mezi relacemi. Můžete spustit některé příkazy, odhlásit se, vrátit se příští den a tyto příkazy budou stále ve vašem souboru historie připraveny k zobrazení a použití.Každý uživatelský účet má vlastní soubor historie se samostatnou historii příkazů.
Chcete-li vymazat historii bash, můžete spustit následující příkaz. Toto vymaže obsah souboru. bash_history vašeho uživatelského účtu: historie
-cBash si pamatuje pouze omezeně počet příkazů ve výchozím nastavení, čímž zabraňuje přílišnému zvětšování souboru historie. Počet záznamů historie, které se ukládají do paměti, je řízen systémem HISTSIZEvariable. Výchozí hodnota je obvykle 500 nebo 1000 položek. Pro zobrazení velikosti historie bash ve vašem systému můžete spustit následující příkaz.
echo $ HISTSIZEChcete-li nastavit historii na nulu, spusťte následující příkaz.
HISTSIZE = 0Pro aktuální relaci nebude bash ukládat žádné záznamy historie, pokud nebude spuštěn příkaz jako HISTSIZE = 1000, aby byl nastaven zpět na určitý počet položek.
Jak ignorovat mezery a duplikáty
Bash umožňuje ignorovat záznamy historie, které začínají mezerou, pokud nastavíte hodnotu HISTCONTROLvariable na ignorespace.
HISTCONTROL = ignorespacePřed zadáním příkazu zadejte mezery před spuštěním v bash shellu a příkaz běží normálně, ale v historii se nezobrazí, pokud je tato proměnná povolena. To vám umožní udržet historii trochu čistší a zvolit si příkazy, aniž by se objevily ve vaší historii.
Bash také umožňuje ignorovat duplicitní příkazy, které mohou zablokovat vaši historii. Chcete-li tak učinit, nastavte HISTCONTROL ignoredups.
HISTCONTROL = ignoredupsChcete-li použít funkci ignorespace i ignoredups, nastavte proměnnou HISTCONTROL na ignoreboth.
HISTCONTROL = ignorebothVšimněte si, že nastavené proměnné bash zůstanou pouze pro aktuální relaci. Budete je muset přidat do souboru. bashrc svého uživatelského účtu, aby tyto hodnoty byly automaticky nastaveny v každé relaci bash, kterou začnete, pokud to chcete.
Bash shell je složitý nástroj s mnoha možnostmi. Podrobnější informace a další pokročilé triky, které můžete použít, naleznete v sekci Bash History History a Expansion History v oficiálním manuálu.