V předchozím článku jsme diskutovali o proměnných prostředí Linux PS[1-4] a PROMPT_COMMAND. Při efektivním používání může PS1 poskytovat cenné informace přímo na příkazovém řádku.
V Tomb Raider má Angelina Jolie na dosah ruky všechny pomůcky a zbraně, aby záhadu vyřešila stylově. Zatímco gadget a styl Angeliny Jolie je těžké vyrovnat, pokusme se alespoň udělat starou dobrou linuxovou výzvu velmi funkční a stylovou pomocí 10 příkladů uvedených v tomto článku.
1. Zobrazit uživatelské jméno, název hostitele a aktuální pracovní adresář ve výzvě
PS1 v tomto příkladu zobrazuje ve výzvě následující tři informace:
- \u – Uživatelské jméno
- \h – Název hostitele
- \w – Úplná cesta k aktuálnímu pracovnímu adresáři
-bash-3.2$ export PS1="\u@\h \w> "
ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
2. Zobrazení aktuálního času ve výzvě
V proměnné prostředí PS1 můžete přímo spustit jakýkoli příkaz systému Linux zadáním ve formátu $(linux_command). V následujícím příkladu se provede příkaz $(date) k zobrazení aktuálního času uvnitř výzvy.
ramesh@dev-db ~> export PS1="\u@\h [\$(date +%k:%M:%S)]> "
ramesh@dev-db [11:09:56]>
Můžete také použít \t k zobrazení aktuálního času ve formátu hh:mm:ss, jak je uvedeno níže:
ramesh@dev-db ~> export PS1="\u@\h [\t]> "
ramesh@dev-db [12:42:55]>
Můžete také použít \@ k zobrazení aktuálního času ve 12hodinovém formátu dopoledne/odpoledne, jak je uvedeno níže:
ramesh@dev-db ~> export PS1="[\@] \u@\h> "
[04:12 PM] ramesh@dev-db>
3. Zobrazte výstup libovolného příkazu Linuxu ve výzvě
Ve výzvě můžete zobrazit výstup libovolného příkazu Linuxu. Následující příklad zobrazuje tři položky oddělené | (pipe) v příkazovém řádku:
- \!: Číslo historie příkazu
- \h: název hostitele
- $kernel_version: Výstup příkazu uname -r z proměnné $kernel_version
- \$?: Stav posledního příkazu
ramesh@dev-db ~> kernel_version=$(uname -r)
ramesh@dev-db ~> export PS1="\!|\h|$kernel_version|\$?> "
473|dev-db|2.6.25-14.fc9.i686|0>
4. Změňte barvu popředí výzvy
Zobrazit výzvu v modré barvě spolu s uživatelským jménem, hostitelem a informacemi o aktuálním adresáři
$ export PS1="\e[0;34m\u@\h \w> \e[m" [Note: This is for light blue prompt] $ export PS1="\e[1;34m\u@\h \w> \e[m" [Note: This is for dark blue prompt]
- \e[ – Označuje začátek barevné výzvy
- x;ym – Označuje kód barvy. Použijte hodnoty barevného kódu uvedené níže.
- \e[m – označuje konec barevné výzvy
Tabulka barevných kódů:
Black 0;30 Blue 0;34 Green 0;32 Cyan 0;36 Red 0;31 Purple 0;35 Brown 0;33 [Note: Replace 0 with 1 for dark color]
Udělejte změnu barvy trvalou přidáním následujících řádků do .bash_profile nebo .bashrc
STARTCOLOR='\e[0;34m';
ENDCOLOR="\e[0m"
export PS1="$STARTCOLOR\u@\h \w> $ENDCOLOR"
5. Změňte barvu pozadí výzvy
Změňte barvu pozadí zadáním \e[{code}m ve výzvě PS1, jak je uvedeno níže.
$ export PS1="\e[47m\u@\h \w> \e[m"
[Note: This is for Light Gray background]
Kombinace pozadí a popředí
export PS1="\e[0;34m\e[47m\u@\h \w> \e[m"
[Note: This is for Light Blue foreground and Light Gray background]
Přidejte následující do .bash_profile nebo .bashrc, aby výše uvedená barva pozadí a popředí byla trvalá.
STARTFGCOLOR='\e[0;34m'; STARTBGCOLOR="\e[47m" ENDCOLOR="\e[0m" export PS1="$STARTFGCOLOR$STARTBGCOLOR\u@\h \w> $ENDCOLOR"
Pohrajte si s použitím následující barvy pozadí a vyberte si tu, která vyhovuje vašemu vkusu:
- \e[40 m
- \e[41 m
- \e[42 m
- \e[43m
- \e[44m
- \e[45 m
- \e[46 m
- \e[47m
6. Zobrazení více barev ve výzvě
Ve stejné výzvě můžete také zobrazit více barev. Přidejte následující funkci do .bash_profile
function prompt { local BLUE="\[\033[0;34m\]" local DARK_BLUE="\[\033[1;34m\]" local RED="\[\033[0;31m\]" local DARK_RED="\[\033[1;31m\]" local NO_COLOR="\[\033[0m\]" case $TERM in xterm*|rxvt*) TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) TITLEBAR="" ;; esac PS1="\u@\h [\t]> " PS1="${TITLEBAR}\ $BLUE\u@\h $RED[\t]>$NO_COLOR " PS2='continue-> ' PS4='$0.$LINENO+ ' }
Můžete se znovu přihlásit, aby se změny projevily, nebo zdroj .bash_profile, jak je uvedeno níže.
$. ./.bash_profile $ prompt ramesh@dev-db [13:02:13]>
7. Změňte barvu výzvy pomocí tput
Můžete také změnit barvu výzvy PS1 pomocí tput, jak je znázorněno níže:
$ export PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"
tput Color Capabilities:
- tput setab [1-7] – Nastavte barvu pozadí pomocí ANSI escape
- tput setb [1-7] – Nastavte barvu pozadí
- tput setaf [1-7] – Nastavte barvu popředí pomocí ANSI escape
- tput setf [1-7] – Nastavte barvu popředí
Možnosti tput textového režimu:
- tdejte tučné – Nastavte režim tučného písma
- tput dim – zapněte polojasný režim
- tput smul – spustit režim podtržení
- tput rmul – ukončit režim podtržení
- tput rev – Zapněte zpětný režim
- tput smso – Vstupte do pohotovostního režimu (tučně na rxvt)
- tput rmso – Ukončete režim standout
- tput sgr0 – Vypněte všechny atributy
Barevný kód pro tput:
- 0 – černá
- 1 – červená
- 2 – Zelená
- 3 – žlutá
- 4 – modrá
- 5 – purpurová
- 6 – azurová
- 7 – Bílá
8. Vytvořte si vlastní výzvu pomocí dostupných kódů pro proměnnou PS1
Použijte následující kódy a vytvořte si vlastní osobní výzvu pro PS1 Linux, která je funkční a vyhovuje vašemu vkusu. Který kód z tohoto seznamu bude velmi užitečný pro každodenní použití? Zanechte svůj komentář a dejte mi vědět, jaký kód PS1 jste použili pro výzvu systému Linux.
- \a znak ASCII zvonku (07)
- \d datum ve formátu „Datum měsíce v týdnu“ (např. „Út 26. května“)
- \D{format} – formát je předán strftime(3) a výsledek je vložen do promptu; prázdný formát má za následek reprezentaci času specifickou pro národní prostředí. Rovnátka jsou povinná
- \e znak ASCII (033)
- \h název hostitele až do první části
- \H název hostitele
- \j počet úloh aktuálně spravovaných prostředím
- \l základní název názvu koncového zařízení shellu
- \n nový řádek
- \r návrat vozíku
- \s název shellu, základní název $0 (část za posledním lomítkem)
- \t aktuální čas ve 24hodinovém formátu HH:MM:SS
- \T aktuální čas ve 12hodinovém formátu HH:MM:SS
- \@ aktuální čas ve 12hodinovém formátu ráno/odpoledne
- \A aktuální čas ve 24hodinovém formátu HH:MM
- \u uživatelské jméno aktuálního uživatele
- \v verzi bash (např. 2.00)
- \V vydání bash, verze + úroveň opravy (např. 2.00.0)
- \w aktuální pracovní adresář s $HOME zkráceným vlnovkou
- \W základní název aktuálního pracovního adresáře s $HOME zkráceným s vlnovkou
- \! číslo historie tohoto příkazu
- \# číslo příkazu tohoto příkazu
- \$ pokud je efektivní UID 0, #, jinak $
- \nnn znak odpovídající osmičkovému číslu nnn
- \\ zpětné lomítko
- \[ začít sekvenci netisknutelných znaků, kterou lze použít k vložení ovládací sekvence terminálu do výzvy
- \] ukončit sekvenci netisknutelných znaků
9. Použijte funkci bash shell uvnitř proměnné PS1
Můžete také vyvolat funkci bash shell v PS1, jak je znázorněno níže.
ramesh@dev-db ~> function httpdcount { > ps aux | grep httpd | grep -v grep | wc -l > } ramesh@dev-db ~> export PS1="\u@\h [`httpdcount`]> " ramesh@dev-db [12]> [Note: This displays the total number of running httpd processes]
Chcete-li, aby tato změna byla trvalá, můžete do .bash_profile nebo .bashrc přidat následující řádek:
function httpdcount { ps aux | grep httpd | grep -v grep | wc -l } export PS1='\u@\h [`httpdcount`]> '
10. Použijte skript shellu uvnitř proměnné PS1
Můžete také vyvolat skript shellu uvnitř proměnné PS1. V níže uvedeném příkladu je ~/bin/totalfilesize.sh, který vypočítává celkovou velikost souboru aktuálního adresáře, vyvolán uvnitř proměnné PS1.
ramesh@dev-db ~> cat ~/bin/totalfilesize.sh for filesize in $(ls -l . | grep "^-" | awk '{print $5}') do let totalsize=$totalsize+$filesize done echo -n "$totalsize" ramesh@dev-db ~> export PATH=$PATH:~/bin ramesh@dev-db ~> export PS1="\u@\h [\$(totalfilesize.sh) bytes]> " ramesh@dev-db [534 bytes]> cd /etc/mail ramesh@dev-db [167997 bytes]>
[Note: This executes the totalfilesize.sh to display the total file size of the current directory in the PS1 prompt]
Kolik úprav jste provedli na svém PS1? Dokáže vaše PS1 porazit Angelinu Jolie? Zanechte komentář a sdílejte svůj PS1 hodnota výzvy.
Doporučená četba
Bash Cookbook, Carl Albing, JP Vossen a Cameron Newham . Bash je velmi silná skořápka. Tato kniha vám pomůže zvládnout bash shell a stát se vysoce produktivní. Ať už jste sysadmin, DBA nebo vývojář, musíte v určitém okamžiku napsat skript shellu. Moudrý správce systému ví, že jakmile si osvojíte techniky skriptování v shellu, můžete své servery přepnout do režimu automatického pilotování tím, že necháte skripty shellu pracovat. Abyste se dostali do autopilotního režimu sysadmin, rozhodně musíte zvládnout příklady uvedené v této kuchařce. Existuje několik tichých knih o bashových skořápkách. Ale tato kniha je všechny převyšuje tím, že poskytuje spoustu podrobných příkladů.
Dodatečné doporučení knihy pro Linux:12 úžasných a základních knih o Linuxu, které obohatí váš mozek a knihovnu
Pokud se vám tento článek líbil, uložte si jej do záložek na del.icio.us a zakopněte o něj.