Pomocí příkazu `shopt` můžete vyladit chování vašeho Bash shellu a ovládat tak více než 50 různých nastavení. Ukážeme vám, jak si přizpůsobit svůj Linuxový systém tak, aby vyhovoval vašim potřebám a preferencím.
Vestavěný příkaz shopt
Příkaz `shopt` je standardní součástí všech verzí Bash shellu, takže není nutné instalovat žádné další balíčky. Počet možností, které `shopt` nabízí, se postupem času rozšiřoval. Proto platí, že čím starší verzi Bash používáte, tím méně možností budete mít k dispozici.
Pokud máte pocit, že se váš systém nechová podle vašich představ, projděte si manuálovou stránku pro Bash a ověřte, zda daná možnost je dostupná ve vaší verzi `shopt`.
V následujícím textu si projdeme všechny možnosti, které `shopt` nabízí. Popíšeme si také, jak je používat a ukážeme si několik praktických příkladů. Pro hlubší pochopení můžete nahlédnout do manuálové stránky Bash nebo do referenční příručky GNU Bash, kde najdete podrobnější informace.
Některé z možností `shopt` jsou ve výchozím nastavení aktivovány a tvoří tak základní chování Bash. Můžete je aktivovat pro aktuální relaci Bash. Po zavření shellu se vše vrátí do výchozího stavu. Nicméně, pokud chcete trvalé změny, které se budou aktivovat při každém spuštění Bash, musíte provést specifické nastavení.
Možnosti příkazu shopt
K dispozici máte celkem 53 různých možností příkazu `shopt`. Pokud spustíte příkaz `shopt` bez dalších parametrů, zobrazí se vám jejich seznam. Pro zjištění přesného počtu je vhodné výstup z příkazu předat dalšímu příkazu, například `wc`, který spočítá řádky, slova a znaky. Vzhledem k tomu, že každá možnost je na samostatném řádku, počet řádků nám udává počet všech dostupných možností.
Zadejte například:
shopt | wc
Pro lepší přehled o všech dostupných možnostech můžete výstup přesměrovat na příkaz `column`, který zobrazí názvy možností ve sloupcích nebo použít například `less`.
Zadejte:
shopt | column
Vyhledávání informací o shopt v manuálu Linuxu
Informace o příkazu `shopt` a jeho možnostech se nacházejí v sekci Bash v manuálu systému Linux. Sekce Bash má více než 6000 řádků textu. Popis příkazu `shopt` najdete buď postupným rolováním, nebo jednoduše vyhledáváním.
Pro otevření manuálové stránky pro Bash použijte příkaz:
man bash
V rámci manuálu zahajte vyhledávání stisknutím lomítka `/`. Zadejte následující text a potvrďte stisknutím klávesy Enter:
assoc_expand_once
Zobrazí se začátek sekce s možnostmi příkazu `shopt`.
Aktivace a deaktivace možností
Pro aktivaci nebo deaktivaci možností příkazu `shopt` použijte následující parametry:
- `-s`: Nastaví (aktivuje) danou možnost.
- `-u`: Zruší nastavení (deaktivuje) danou možnost.
Protože některé možnosti jsou standardně aktivovány, je užitečné zkontrolovat, které z nich jsou aktuálně zapnuté. Můžete toho dosáhnout pomocí parametrů `-s` a `-u` bez uvedení názvu konkrétní možnosti. Příkaz `shopt` pak zobrazí seznam aktivních a neaktivních možností.
Zadejte například:
shopt -s
shopt -u | column
Příkaz `shopt` můžete použít také bez parametrů `-s` nebo `-u` pro zjištění stavu (aktivní/neaktivní) jednotlivých možností.
Například pro zjištění nastavení možnosti `histverify` zadejte:
shopt histverify
Pro její aktivaci použijte:
shopt -s histverify
Následně zkontrolujte stav možnosti znovu:
shopt histverify
Možnost `histverify` ovlivňuje způsob, jakým funguje historie příkazů. Standardně, pokud chcete z historie příkazů vyvolat příkaz pomocí čísla, například `!245`, příkaz se načte z historie a ihned se spustí.
Pokud preferujete zkontrolovat příkaz před jeho spuštěním a případně jej upravit, aktivujte možnost `histverify`:
shopt -s histverify
Nyní, pokud zadáte například:
!245
Příkaz se načte a zobrazí na příkazové řádce. Můžete ho smazat, upravit nebo spustit stisknutím klávesy Enter.
Možnost autocd
Pokud je aktivní možnost `autocd`, tak pokud na příkazovou řádku zadáte název adresáře a stisknete Enter, bude se s ním zacházet, jako byste před něj zadali příkaz `cd`.
Pro aktivaci možnosti `autocd` zadejte:
shopt -s autocd
Následně zadejte název adresáře:
Documents
Možnost cdspell
Pokud je aktivní možnost `cdspell`, Bash automaticky opraví jednoduché překlepy v názvech adresářů.
Pro aktivaci možnosti `cdspell` zadejte:
shopt -s cdspell
Zkuste se přesunout do adresáře s malými písmeny, který by měl mít velké počáteční písmeno, zadejte například:
cd documents
Nebo zadejte název adresáře s navíc jedním písmenem:
cd ../Picttures
Bash se přesune do zadaného adresáře i přes tyto chyby v názvu.
Možnost xpg_echo
Pokud je aktivní možnost `xpg_echo`, příkaz `echo` bude interpretovat escape sekvence, například `\n` pro nový řádek nebo `\t` pro horizontální tabulátor.
Nejprve se ujistěte, že je možnost aktivní:
shopt -s xpg_echo
Nyní zadejte text s escape sekvencí:
echo "This is line onenThis is line two"
Escape sekvence pro nový řádek způsobí zalomení řádku ve výstupu.
To je stejné chování, jako kdybyste použili parametr `-e` s příkazem `echo` (umožní interpretaci escape sekvencí), ale `xpg_echo` z něj činí výchozí chování.
Možnost dotglob
S možností `dotglob` by se mělo zacházet opatrně. Umožňuje zahrnutí souborů a adresářů začínajících tečkou (`.`) do rozšiřování názvů souborů („globbingu“). Obvykle jsou tyto soubory a adresáře skryté. Možnost `dotglob` ignoruje tečku na začátku jejich názvu.
Vyhledejte například soubory, které končí na „geek“:
ls *geek
Je nalezen a zobrazen jeden soubor. Nyní aktivujte možnost `dotglob`:
shopt -s dotglob
Zadejte stejný příkaz pro vyhledání souborů končících na „geek“:
ls *geek
Tentokrát jsou nalezeny a zobrazeny dva soubory, z nichž jeden je soubor s tečkou na začátku. Buďte opatrní při používání příkazů `rm` a `mv`, pokud máte aktivovanou možnost `dotglob`.
Možnost nocaseglob
Možnost `nocaseglob` je podobná `dotglob`, s tím rozdílem, že `nocaseglob` způsobí, že se při rozšiřování názvů souborů budou ignorovat rozdíly ve velikosti písmen.
Pro vyhledání souborů nebo adresářů, které začínají na „how“, zadejte:
ls how*
Je nalezen a zobrazen jeden soubor. Nyní aktivujte možnost `nocaseglob`:
shopt -s nocaseglob
Zopakujte příkaz `ls`:
ls how*
Jsou nalezeny dva soubory, z nichž jeden obsahuje velká písmena.
Trvalé provedení změn
Změny, které jste provedli, budou platit jen do zavření aktuálního prostředí Bash. Pro trvalé uložení změn je musíte přidat do souboru „.bashrc“.
Ve svém domovském adresáři zadejte následující příkaz pro otevření souboru „.bashrc“ v textovém editoru Gedit (případně použijte jiný textový editor, který preferujete):
gedit .bashrc
Otevře se textový editor s načteným souborem „.bashrc“. Můžete si všimnout, že některé položky příkazu `shopt` jsou v něm už zapsány.
Zde můžete přidat i vaše vlastní nastavení příkazu `shopt`. Po provedení změn soubor uložte a zavřete editor. Nyní se vaše nastavení automaticky aktivuje při každém spuštění nového shellu Bash.
Možností je mnoho
Příkaz `shopt` nabízí velké množství možností. Nemusíte se s nimi seznamovat všechny najednou, pokud vůbec. Vzhledem k jejich počtu se pravděpodobně najdou i takové, které vás nebudou zajímat.
Některé možnosti například slouží k tomu, aby se Bash choval jako starší verze. To může být pro někoho užitečné, ale jedná se o poměrně specifický případ.
Projděte si manuálovou stránku Bash nebo referenční příručku GNU Bash. Vyberte si možnosti, které vás zajímají a experimentujte s nimi. Buďte opatrní s možnostmi, které ovlivňují rozšiřování názvů souborů a adresářů. Nejdříve je vyzkoušejte s příkazem, jako je například `ls` dokud si nebudete jisti jejich funkčností.