Bash

Bash je sh-kompatibilní příkazový interpret, který spouští příkazy čtené z klasického vstupu anebo ze souboru. Bash také zabudoval užitečné funkce ze shellů Korn a C (ksh, csh).

Bash je určený pro pohodlnou implementaci Shellu a pomůcek podílejících se na POSIX specifikaci (IEEE Standard 1003.1). Bash může být jako výchozí konfigurovaný pro POSIX přizpůsobení.

Nastavení

Obecné uživatelské nastavení je v souboru .bashrc, který se nachází v domovském adresáři uživatele. Dodatečné nastavení profilu, které je doporučeno pro přizpůsobení, najdeme v souboru .bash_profile.

/home/franta/.bashrc
/home/franta/.bash_profile

Bash_profile

Soubor .bash_profile se nachází v adresáři uživatele a udává profilové nastavené bashe, které se načítá po přihlášení. Může obsahovat skripty a vypadat třeba takto:

if [[ -f ~/.bashrc ]] ; then
	. ~/.bashrc
fi
export PATH="/home/${USER}/.local/bin:${PATH}"
export ADRESAR_ZALOHA="/mnt/Záloha"
		    

Zde dojde k načtení souboru .bashrc jestliže existuje.

Zkratky - alias

Zkraty se zapisují ve formě: zkratka='příkaz_pro_zkratku'. Taková zkratka se po zadání „zkratky“ jako příkazu vykoná.

nano ~/.bashrcalias s="startx"
alias home="cd /home/martin"
alias wifi="sudo wifi-menu"

Oddělené aliasy

V souboru .bashrc si načtu samostatný soubor obsahující aliasy tak, jak jsou běžně zapisované. V mém případě je to samostaný soubor .bash_alias_standard.

nano ~/.bashrcif [[ -f ~/.bash_alias_standard ]] ; then
        . ~/.bash_alias_standard
fi

Automatický start X - nepoužívám

Pokud není spuštěné grafické prostředí, spustí automaticky startx. Odzkoušeno na Arch Linuxu.

if systemctl -q is-active graphical.target && [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
  exec startx
fi

Toto nastavení je pro obecné startování X Serveru v některých případech nepraktické a nepoužívá se.

Bash-completion

Pro rozšířené možnosti doplňování pomocí klávesy TAB můžeme nainstalovat balíček bash-completion. Tento nástroj se může prát s některými ručně zadanými nastaveními pro Bash, nicméně pro standardní konfiguraci funguje skvěle.

.bashrc

Vlastní zobrazení v terminálu

Zde je velký prostor pro fantazii a zapnutí terminálu může vypadat jako na obrázku. Použitý terminál je rxvt-unicode a font terminus. Vypíše na začátku základních 16 barev terminálu.

.bashrc:

nano ~/.bashrc:echo -e '  \e[1;32m┌─\e[0;30m▇▇\e[0;31m▇▇\e[0;32m▇▇\e[0;33m▇▇\e[0;34m▇▇\e[0;35m▇▇\e[0;36m▇▇\e[0;37m▇▇\e[1;32m─┬─╼ Máš na to!'
echo -e '\e[1;32m╾─┴─\e[01;30m▇▇\e[01;31m▇▇\e[01;32m▇▇\e[01;33m▇▇\e[01;34m▇▇\e[01;35m▇▇\e[01;36m▇▇\e[01;37m▇▇\e[1;32m─┴─╼ Prostě to udělej!'

reset=$(tput sgr0)
bold=$(tput bold)

PS1="\n\[\e[1;32m\]┌[\[\e[1;36m\u\e[1;32m\]]─[\e[1;37m\w\e[1;32m]─[\[\e[1;36m\]${HOSTNAME%%.*}\[\e[1;32m\]]─\033[01;32m(\t) \n\[\e[1;32m\]└─╼ \[\e[00;00m\]"


# ls a cd
function cdls { cd "$1"; ls --color;}
alias cd='cdls'

export LS_OPTIONS='--color=auto'

eval "`dircolors`"
alias ls='ls $LS_OPTIONS'

Použití více řádků jako základ terminálu - Nepěkné je, když je potřeba překreslovat a roztahovat či smršťovat okno s terminálem. Dochází k odskokům zřejmě kvůli navýšení popsaných řádků po inicializaci - takže jsem od víceřádkových výpisů upustil.

Gruvbox

Můj odladění bash
echo -e "\e[00;31m▇\e[1;31m▇ \e[0;31mHostname: \e[1;31m${HOSTNAME%%.*}"
echo -e "\e[00;32m▇\e[1;32m▇ \e[0;32mShell: \e[1;32m${SHELL%%.*}"
echo -e "\e[00;33m▇\e[1;33m▇ \e[0;33mTerminal: \e[1;33m${TERM%%.*}"
echo -e "\e[00;34m▇\e[1;34m▇ \e[0;34mEditor: \e[1;34m${EDITOR%%.*}"
echo -e "\e[00;35m▇\e[1;35m▇ \e[0;35mUser: \e[1;35m${USER%%.*}"
echo -e "\e[00;36m▇\e[1;36m▇ \e[1;36mJ\e[00;35mď\e[1;35mi \e[1;34md\e[0;33mo \e[00;32mt\e[01;32mo\e[0;31mh\e[1;31mo\e[01;36m!"
#cho -e '\e[0;30m▇\e[01;30m▇\e[0;36m▇\e[01;36m▇\e[0;35m▇\e[01;35m▇\e[0;34m▇\e[01;34m▇\e[0;33m▇\e[01;33m▇\e[0;32m▇\e[01;32m▇\e[0;31m▇\e[01;31m▇'
fortune -n 200 -s
reset=$(tput sgr0)
bold=$(tput bold)

PS1='\[\033[01;32m\]\u\[\033[01;31m\]@\[\033[01;34m\]\h\[\033[01;33m\] \W \[\033[01;35m\]\$\[\033[00m\] '

Další konfigurace .bashrc

Další možné zobrazení terminálu
echo -e '\e[0;30m▇▇\e[0;31m▇▇\e[0;32m▇▇\e[0;33m▇▇\e[0;34m▇▇\e[0;35m▇▇\e[0;36m▇▇\e[0;37m▇▇\n\e[01;30m▇▇\e[01;31m▇▇\e[01;32m▇▇\e[01;33m▇▇\e[01;34m▇▇\e[01;35m▇▇\e[01;36m▇▇\e[01;37m▇▇'
echo -e "\e[0;37mHostname: \e[1;32m${HOSTNAME%%.*}"
echo -e "\e[0;37mShell: \e[1;32m${SHELL%%.*}"
echo -e "\e[0;37mTerminal: \e[1;32m${TERM%%.*}"
echo -e "\e[0;37mEditor: \e[1;32m${EDITOR%%.*}\n"
#ANSI shadow text
echo -e "███╗   ███╗██╗   ██╗"
echo -e "████╗ ████║██║   ██║"
echo -e "██╔████╔██║██║   ██║"
echo -e "██║╚██╔╝██║╚██╗ ██╔╝"
echo -e "██║ ╚═╝ ██║ ╚████╔╝ "
echo -e "╚═╝     ╚═╝  ╚═══╝  \n"

reset=$(tput sgr0)
bold=$(tput bold)

PS1="\[\e[1;32m\][\[\e[1;36m\u\e[1;32m\]]─[\e[1;37m\W\e[1;32m]\[\e[1;32m\]─╼ \[\e[00;00m\]"