Domovská » jak » Jak přizpůsobit (a zbarvit) svůj Bash Prompt

    Jak přizpůsobit (a zbarvit) svůj Bash Prompt

    Většina linuxových distribucí nakonfiguruje příkaz Bash tak, aby vypadal něco podobného username @ hostname: adresář $ . Můžete však nakonfigurovat příkaz Bash tak, aby obsahoval vše, co se vám líbí, a dokonce si vyberte libovolné barvy, které se vám líbí.

    Příklady kroků zde byly provedeny na Ubuntu 16.04 LTS. Proces by měl být stejný u jiných distribucí Linuxu, ačkoli výchozí výzva Bash a nastavení v souboru .bashrc mohou být trochu jiné.

    Kde je uložena Prompt Proměnná

    Konfigurace výzvy Bash je uložena ve vašem souboru .bashrc v uživatelském účtu, který je v adresáři ~ / .bashrc. Takže pokud je vaše uživatelské jméno bob, soubor je u /home/bob/.bashrc.

    Soubor můžete otevřít a zobrazit aktuální proměnnou Bash. Budeme používat nano jako náš příklad textový editor, ačkoli byste mohli také použít vi, emacs, nebo jakýkoli jiný textový editor, který vám vyhovuje. Otevřete terminál a spusťte:

    nano ~ / .bashrc

    Přejděte dolů na PS1 = sekce. První proměnná vypadá poněkud komplikovaně, protože obsahuje barevné informace - vysvětlíme to později. Druhá proměnná, bez informací o barvě, zní takto:

    $ debian_chroot: + ($ debian_chroot) \ u @ \ h: \ w \ $

    To je ještě trochu komplikované kvůli $ debian_chroot: + ($ debian_chroot) bitů. Jednoduše řekněte Bashovi, že vás informuje, pokud používáte chrootové prostředí Debianu a obvykle se nezobrazí. Pokud ignorujete ty, je zde výchozí struktura proměnné Bash prompt:

    \ u @ \ h: \ w \ $

    \ u označuje vaše uživatelské jméno, @ označuje znak @, \ h označuje název hostitele (název počítače), : označuje znak:, \ w označuje pracovní adresář a \ $ znamená $, pokud jste běžným uživatelským účtem nebo # jste-li kořenem. Takže to všechno dohromady získáte uživatelské jméno @ hostname: working_directory $.

    Chcete-li změnit příkaz Bash, stačí přidat, odstranit nebo uspořádat speciální znaky v proměnné PS1. Existuje však mnohem více proměnných, které můžete použít než výchozí.

    Ponechejte textový editor pro nyní-nano, stiskněte Ctrl + X pro ukončení. Ukážeme vám, jak experimentovat s proměnnými, než skutečně zapíšete novou do souboru .bashrc.

    Jak vytvořit vlastní Bash Prompt

    Konfigurace výzvy Bash je uložena v proměnné PS1. Chcete-li uložit obsah proměnné PS1 do nové proměnné, spusťte následující příkaz:

    DEFAULT = $ PS1

    Nyní můžete nastavit proměnnou PS1 na různé hodnoty pro experiment. Například první řádek zde nastaví výzvu na základní výzvu "user $", zatímco druhý nastaví výzvu na základní výzvu "user: working_directory $".

    PS1 = "\ u \ $" PS1 = "\ u: \ w \ $"

    Pokud se někdy chcete vrátit k výchozím výzvám, spusťte následující příkaz.

    PS1 = $ DEFAULT

    Bash bude obnoven na výchozí výzvu díky tomu, že jste dříve uložili tato výchozí nastavení. Všimněte si, že všechny změny, které zde provedeme, jsou pouze dočasné pro aktuální relaci Bash, takže se můžete vždy odhlásit a přihlásit nebo zavřít a znovu otevřít okno terminálu a vrátit se k výchozím výzvám. Ale výše uvedený řádek umožňuje snadné vrácení se do výchozího příkazu Bash bez potíží s odhlášením nebo zavřením okna.

    Do proměnné můžete přidat libovolné znaky nebo text. Chcete-li předdefinovat výchozí příkaz "Hello World", můžete použít:

    PS1 = "Dobrý den svět \ u @ \ h: \ w \ $"

    Nyní, když máte základy dolů, stačí vědět, jaké jsou všechny speciální postavy. Pravděpodobně se o mnohé z nich nebudete bát, ale tady je úplný seznam, který se objevuje v příručce Bash:

    • Zvonová postava: \A
    • Datum, ve formátu "Datum v týdnu v týdnu" (např. "Út 26. května"): \ d
    • Formát je předán strftime (3) a výsledek je vložen do výzvy řetězec; prázdný formát vede k časové reprezentaci specifické pro místní nastavení. Vyztužovací prvky jsou nutné: \ D formát
    • Escape character: \E
    • Název hostitele, až do prvního '.': \ h
    • Název hostitele: \ H
    • Počet úloh, které v současné době spravuje shell: \ j
    • Základní název názvu terminálu zařízení shellu: \ l
    • Nový řádek: \ n
    • Návrat vozíku: \ r
    • Název shellu, základní název $ 0 (část následující po poslední lomítko): \ s
    • Čas, v 24hodinovém formátu HH: MM: SS: \ t
    • Čas, v 12hodinovém formátu HH: MM: SS: \ T
    • Čas, ve formátu 12 hodin ve formátu am / pm: \ @
    • Čas, v 24hodinovém formátu HH: MM: \A
    • Uživatelské jméno aktuálního uživatele: \ u
    • Verze Bash (např. 2,00): \proti
    • Uvolnění Bash, verze + patchlevel (např. 2.00.0): \PROTI
    • Současný pracovní adresář, kde $ HOME je zkrácený tilde (používá proměnnou $ PROMPT_DIRTRIM): \ w
    • Název bazénu $ PWD, s $ HOME zkrácený tilde: \ W
    • Číslo historie tohoto příkazu: \!
    • Příkazové číslo tohoto příkazu: \ #
    • Pokud efektivní uid je 0, #, jinak $: \ $
    • Znak, jehož kód ASCII je osmičková hodnota nnn: \ nnn
    • Zpětné lomítko: \\
    • Začněte sekvenci nepotlačovacích znaků. To může být použito k vložení sekvence řízení terminálu do výzvy: \ [
    • Ukončení posloupnosti znaků bez tisku: \]

    Pokud jste tedy chtěli přidat datum a čas do vašeho příkazu Bash a na druhém řádku položit pracovní adresář na příkaz, můžete použít následující konstrukci:

    PS1 = "[\ d \ t] \ u @ \ h \ n \ w \ $"

    Hranaté hranaté závorky zde nejsou vůbec nutné, ale pomáhají vám rozdělit věci vizuálně a usnadnit jejich čtení. Jak jsme již dříve pokryli, můžete do proměnné, která se vám líbí, přidat jakýkoli text nebo normální znaky, takže se můžete zdarma věnovat tomu, co pro vás pracuje.

    Je tu ještě jeden silnější trik, o němž byste měli vědět: Můžete přidat výstup libovolného příkazu do výzvy. Kdykoli se zobrazí výzva, příkaz Bash spustí příkaz a vyplní aktuální informace. Chcete-li to provést, zadejte pouze příkaz, který chcete spustit mezi dvěma " znaky. To není apostrof - to je vážný přízvuk, který se objevuje nad klávesou Tab na klávesnici.

    Řekněme, že chcete zobrazit v Linuxu verzi jádra Linuxu. Můžete použít řádek, jako je následující:

    PS1 = "\ u @ \ h na 'uname -s -r' \ w \ $"

    Jako další příklad, řekněme, že chcete zobrazit systémový provoz a průměr zatížení, jak je zobrazen uptime příkaz. Mohli byste použít následující konstrukci, která před uplynutím restartu uplyne čas potřebný pro údržbu na vlastní linku.

    PS1 = "(" uptime ") \ n \ u @ \ h: \ w $"

    Neváhejte experimentovat s různými speciálními znaky a příkazy pro sestavení ideálního příkazového řádku.

    Jak přidat barvy do vašeho Bash Prompt

    Jakmile zjistíte preferovanou výzvu, můžete do ní přidat barvy. To je ve skutečnosti velmi jednoduché, ale způsobuje, že proměnná vypadá hrozně špinavá a komplikovaná, pokud nechápete, na co se díváte.

    Například výchozí proměnná výzvy barvy z předchozího období byla:

    $ debian_chroot: + ($ debian_chroot) \ [033 [01; 32m \] \ u @ \ h \ [033 [00m \]: \ [033 [ [00m \] \ $

    Nebo odstraňte bity debian_chroot ještě jednou:

    \ [033 [01; 32m \] \ u @ \ h \ [033 [00m \]: \ [033 [01; 34m \] \ w \

    To je vlastně jen \ u @ \ h: \ w $ proměnná od dříve, ale s barevnými informacemi. Opravdu, můžeme to rozdělit do několika částí:

    \ [033 [01; 32m \]\ u @ \ h \ [033 [00m \]: \ [033 [01; 34m \]\ w \ [033 [00m \]\ $

    První část je \ u @ \ h bit, před kterým se zobrazí informace o barvě, která se změní na zelenou. Druhá je : znak, který předchází barevná informace, která odstraňuje jakékoliv zabarvení. Třetí je \ w bit, před kterým jsou zobrazeny informace o barvě, které změní modrou barvu. Čtvrtý je \ $ bit, před kterým jsou předávány informace o barvě, které odstraňují jakékoliv zabarvení.

    Jakmile pochopíte, jak vytvořit vlastní značku barev, můžete přidávat libovolné barvy, které se vám líbí, na libovolné části vašeho příkazu Bash, který se vám líbí.

    Zde je to, co potřebujete vědět: Musíte zahrnout celou informaci o barevném kódu mezi \ [  a \]s. Uvnitř tagu musíte začít s oběma \ 033 [ nebo \E[ aby Bashovi uvedl, že jde o barevné informace. Oba \ 033 [ a \E[ dělej totéž. \E[ je kratší, takže může být pohodlnější, ale budeme používat \ 033 [ zde, protože odpovídá tomu, co je ve výchozím nastavení používáno. Na konci značky musíte skončit m \ označuje konec značky barvy.

    Když to rozbijete, vypadá to, jak bude vypadat každá značka barvy. Jediným rozdílem jsou informace, které přidáte namísto BAREVNĚ pro definování aktuální barvy:

    \ [033 [BARVAm \]

    Bash umožňuje změnu barvy textu v popředí, přidání atributů jako "tučné" nebo "podtržené" do textu a nastavení barvy pozadí.

    Zde jsou hodnoty pro text v popředí:

    • Černá: 30
    • Modrá: 34
    • Cyan: 36
    • Zelená: 32
    • Fialová: 35
    • Červená: 31
    • Bílá: 37
    • Žlutá: 33

    Například, protože fialový text je barevný kód 32, měli byste použít \ [033 [32m \]  pro fialový text.

    Můžete také zadat atribut pro text. Tento atribut musí být přidán před číslem barvy oddělenou středníkem (;). Text s těmito atributy bude vypadat odlišně v různých terminálových emuláterech.

    Zde jsou hodnoty pro atributy textu:

    • Normální text: 0
    • Tučný nebo světlý text: 1 (záleží na emulátoru terminálu.)
    • Dim Text: 2
    • Podtržený text: 4
    • Blikající text: 5 (Tato funkce nefunguje u většiny terminálových emulátorů.)
    • Obrácený text: 7 (Toto invertuje barvy popředí a pozadí, takže na bílém pozadí uvidíte černý text, pokud je aktuální text bílým textem na černém pozadí.)
    • Skrytý text: 8

    Vlastně nemusíte obsahovat atribut normálního textu. To je výchozí.

    Například, protože červený text je kód 31 a tučný text je kód 1, měli byste použít \ [033 [1; 31m \] pro tučný červený text.

    Můžete také určit barvu pozadí, ale nelze přidat barvu pozadí.

    Zde jsou hodnoty pro barvy pozadí:

    • Černé pozadí: 40
    • Modré pozadí: 44
    • Azurové pozadí: 46
    • Zelené pozadí: 42
    • Fialové pozadí: 45
    • Červené pozadí: 41
    • Bílé pozadí: 47
    • Žluté pozadí: 43

    Například, protože modré pozadí je kód 44, \ [033 [44m \] specifikovalo modré pozadí.

    Můžete zadat značky popředí i barvy pozadí. Například 42 představuje zelené pozadí a 31 představuje červený text. Chcete-li, aby se výchozí výzva stala červeným textem na zeleném pozadí, použijte:

    PS1 = "\ [033 [42m \] \ [033 [31m \] \ u @ \ h: \ w \ $ "

    Jednoduše specifikujeme jednu barvu pozadí a pak jednu barvu textu v popředí, která začíná na začátku výzvy a je použita na celý text v řádku. V proměnné však můžete zadat tolik barevných značek, kolik chcete, aby se barvy různých částí výzvy zobrazily.

    Barvy pozadí a popředí textového textu budou nadále pokračovat, pokud nezadáte kód barvy 00, vymažte informace o barvě. Tuto značku můžete použít také v rámci proměnné, chcete-li obnovit formátování zpět na výchozí nastavení někde ve vaší výzvě. Například následující řádek by ukončil všechny barvení před \ $ charakter.

    PS1 = "\ [033 [42m \] \ [033 [31m \] \ u @ \ h: \ w \\ [\ 033 [00m \] \ $ "

    Jak nastavit nový výchozí požadavek

    Jakmile dokončíte experimentování s barvami, měli byste mít Bash výzvu, která se vám líbí v aktuální relaci. Ale pravděpodobně budete chtít, aby tato nová výzva trvalá, takže se automaticky používá ve všech vašich relacích Bash.

    Chcete-li to provést, stačí změnit obsah proměnné PS1 v souboru .bashrc, na který jsme se podívali dříve.

    Otevřete soubor .bashrc ve vašem preferovaném textovém editoru, například takto:

    nano ~ / .bashrc

    Posuňte dolů a vyhledejte sekci PS1 =. Stačí nahradit výchozí proměnnou vlastní přizpůsobenou proměnnou. Pravděpodobně budete chtít nechat $ debian_chroot: + ($ debian_chroot)  bity samy o sobě, nicméně - nebudou se objevovat, ledaže jste v prostředí chrootu.

    Zadejte barevnou proměnnou PS1 pod pokud ["$ color_prompt" = ano); pak řádek. Zadejte proměnnou bez barev pod jiný řádek.

    Uložte soubor a zavřete textový editor. Chcete-li například uložit soubor do nano, stiskněte klávesy Ctrl + O, stiskněte klávesu Enter a poté stiskněte Ctrl + X pro ukončení.

    Při příštím spuštění nového modulu Bash - například přihlášením na terminál nebo otevřením nového okna terminálu - uvidíte vlastní přizpůsobený příkaz.