V Bash, historie
příkaz je klíčem nejen k pochopení toho, co jste dělali během relace shellu, ale také k základnímu materiálu pro nové příkazy, které chcete spouštět v budoucnu. Historie
je zvláště užitečné, když provozujete server bez hlavy. Pokud nemáte myš, nemůžete snadno zkopírovat a vložit poslední polovinu složitého příkazu, abyste spustili jeho mírně upravenou verzi, takže musíte celou věc napsat znovu - pokud nepoužijete historii modifikátory.
Udržujte historii mimo vaši historii
Než začnete diskutovat o historii, zde je tip na uchování doslovné historie
záznamy z vaší historie.
Problém s používáním historie
pro kontrolu vaší historie
spočívá v tom, že přidá záznam do vaší historie
soubor. Tyto záznamy nejen zaplňují vaši historii
, ale také způsobí, že se každý řádek vrátí "dále" od vaší aktuální pozice.
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
105 history
$
Pohyblivý cíl je těžké sledovat a je těžké ho zasáhnout, takže pokud plánujete vážně používat svou historii
pro urychlení vašich Bash interakcí přidejte tuto konfiguraci do .bashrc
soubor:
export HISTCONTROL=$HISTCONTROL:ignorespace
Tato konfigurace zabraňuje přidání jakéhokoli příkazu, kterému předchází mezera, do vaší historie
Bash .
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
$
[ Bezplatný online kurz:Red Hat Enterprise Linux technický přehled. ]
Události historie
Základní struktura historie
shellu začíná seznamem událostí
. událost
je cokoliv, co jste zadali do shellu, následované Return
nebo Enter
klíč. Každá událost
je přiřazeno indexové číslo (číslo řádku) a události můžete zobrazit a vyvolat pomocí označení událostí
.
Chcete-li například vyvolat konkrétní řádkovou položku ve vaší historii
prostředí , použijte vykřičník (!
) bezprostředně následované číslem historie
řádek:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Můžete také odkazovat na minulé příkazy vzhledem k jejich pozici v historii
výpis. Například ke spuštění příkazu dva řádků v minulosti, považujte svou aktuální výzvu za jednu větší než poslední řádek v historii
a poté odečtěte číslo řádku, který chcete provést, od aktuálního čísla řádku. V tomto příkladu řádek 103 je cílový řádek a 105 je aktuální výzva (pro rozdíl 105-103=2 ):
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Pokud chcete znovu spustit poslední řádek, můžete uložit celý znak. Výraz !!
a !-1
jsou synonyma:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Všimněte si, že samotný příkaz se opakuje ve výstupu při historii
se opakuje. Kvůli stručnosti a jasnosti je takový výstup vyloučen ze zbývajících příkladů v tomto článku.
Označení slov
Bash má funkce, které vám pomohou analyzovat vaši historii
pomocí označení slov
a nástroje, které vám umožní upravovat příkazy ve vaší historii
. Mohlo by vám pomoci zamyslet se nad historií
vašeho shellu jako indexované pole nebo dokonce jako velký objekt historie sestávající ze spousty menších položek. Každé slovo na každém řádku vaší historie
je indexován počínaje 0 (což je obvykle příkaz, ale vícedílné příkazy a předpony proměnných prostředí jsou významnou výjimkou). Ke každému indexu se dostanete přidáním dvojtečky (:
) na odkaz na váš řádek, za kterým bezprostředně následuje označení slova
.
Zde je příklad přístupu k prvnímu slovu:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Protože uchopení prvního argumentu je běžné, circumflex (nebo "klobouk":^
) je alias pro :1
.
$ echo foo
$ !!^
foo
Na druhém konci spektra je dolar ($
) znak představuje poslední argument:
$ echo foo bar baz
$ echo !!$
baz
Rozsahy slov
Nemusíte se spokojit jen s jedním argumentem. Můžete také extrahovat rozsahy indexu. Všechny argumenty kromě nulového jsou dostupné s hvězdičkou (*
).
$ echo foo bar baz
$ touch !!*
$ ls
foo bar baz
Toto je ve skutečnosti synonymum pro 1-$
(tj. první argument k poslednímu argumentu). Jak byste mohli očekávat, můžete libovolně definovat svůj rozsah pomocí tohoto nezkráceného zápisu. Tento příklad odkazuje na druhý až pátý argument a ignoruje první a poslední dva argumenty:
$ cp foo a.sh spacer.sh rev.bin sync.py baz ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-5
$ ls -l --classify
a.sh* baz foo rev.bin* spacer.sh* sync.py*
Pokud potřebujete pouze vyloučit poslední jediné slovo z indexu, můžete zadat rozsah bez ukončení:
$ cp foo a.sh spacer.sh ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-
$ ls -l --classify
a.sh* foo spacer.sh*
Použití historie pro rychlost a přesnost
historie
příkaz není vždy o omezení stisku kláves. Můžete použít svou historii
Bash abyste zabránili náhodnému vyloučení souboru nebo složky z důležité operace nebo překlepu v názvu souboru. Seznamte se s historií
příkaz pro robustnější Bash interakce.
[ Chcete si vyzkoušet Red Hat Enterprise Linux? Stáhněte si ji nyní zdarma. ]