Níže je uveden obsah proměnné $PS1
, která právě určuje co se zobrazí v záhlaví terminálu a také v bash promptu, neboli té části před $
. Přidáno je i vysvětlení jednotlivých částí, protože vyznat se v této změti znaků není vůbec jednoduché.
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
# Vysvětlení jednotlivých částí
\[\e]0; # Escape sekvence a 0; určuje počátek textu, který se zobrazí v záhlaví terminálu
\u@\h: \w\a\] # V záhlaví terminálu je uživatel@hostname: aktuální složka, \a je BEL, který určí konec
${debian_chroot:+($debian_chroot)} # Pokud je aktuálně uživatel v prostředí chroot, je zde zobrazeno
\[\033[01;32m\]\u@\h\[\033[00m\] # Jinou barvou vypsán uživatel@hostname
:\[\033[01;34m\]\w\[\033[00m\]\$ # Dvojtečka následována aktuálním adresářem opět jinou barvou
Změnit proměnnou $PS1
lze jednoduše v souboru ~/.bashrc
a vložit do ní cokoli je potřeba. Na stránkách ss64.com je seznam proměnných a barev, které lze použít. Existuje dokonce i generátor, kterým lze obsah vygenerovat v jednoduchém klikátku. Barvy ale prozatím neumí.
Já raději místo přepisování celého promptu využil nahrazení. V souboru .bashrc
se celý prompt skládá na základě různých podmínek. Takže mám zajištěno, že si nepřepíšu něco, co nechci. Následující řádek jsem vložil úplně na konec souboru .bashrc
. Díky za tip Michalovi s tučňákem.
# Nahrazení v proměné PS1, nahrazuje se "@\h[" za "@🐧["
PS1="${PS1/@\\h\\[/@🐧\\[}"
Přidání Kubernetes kontextu a git větve do promptu
V práci se často připojuji přes Kubernetes do několika různých prostředí. Někdy je velmi jednoduché se napříč více terminály splést, ve kterém kontextu se právě nacházím. Něco podobného lze si říct i o gitu a jeho větvích. Níže uvedený kód je opět přidaný na konec .bashrc
souboru. Do promptu přidá jak Kubernetes kontext tak aktuální větev gitu, pokud existuje.
prompt_k8s(){ k8s_current_context=$(kubectl config current-context 2> /dev/null) if [[ $? -eq 0 ]] ; then echo -e "${k8s_current_context}"; fi } # V proměnné PS1 se nahradí ":\[" za ">\[\e[1;33m\]$(prompt_k8s)\e[0m\]:\[" PS1="${PS1/:\\[/>\\[\\e[1;33m\\]\$(prompt_k8s)\\[\\e[0m\\]:\\[}" prompt_git_branch(){ git_branch=$(git branch 2> /dev/null | grep \* | cut -d ' ' -f2) if [[ $? -eq 0 && ! -z "$git_branch" ]] ; then echo -e " [${git_branch}]"; fi } # V proměnné PS1 se nahradí "\$" za "\e[0;36m$(prompt_git_branch)\e[0m\]\$"
PS1="${PS1/\\$/\\[\\e[0;36m\\]\$(prompt_git_branch)\\[\\e[00m\\]\\$}"
Zapnutí změny promptu příkazem
Pokud se výše uvedený skript vloží na konec souboru .bashrc
, je spuštěn při otevření terminálu. Já se rozhodl si Kubernetes kontext zobrazovat jen, když je opravdu potřeba. Nevýhodou ale je, že proměnnou $PS1
nelze změnit ze skriptu, protože poté je brána jako lokální proměnná.
Existuje ale způsob, jak to obejít. Je potřeba vytvořit skript ~/k8s-show-context
, který obsahuje kód jak je uveden výše. Aby se spustil globálně a mohl přepsat proměnnou $PS1
, spustí se příkazem source
. Ten vrací přímo zdrojový kód, který je poté spuštěn, jakoby byl napsán přímo do konzole. Následující řádek stačí vložit do souboru ~/.bash_aliases
. Skript se spustí zadáním aliasu k8s-context
, který kód spustí a změní proměnnou PS1 až do zavření terminálu.
alias k8s-context="source ~/k8s-show-context"
Vlastní zkušenosti s přepisováním promptu můžete sdílet s ostatními v komentářích.
K tomuto článku již není možné přidávat další komentáře