Hlavní navigace

Bash 5.0 vyšel s mnoha novinkami a vylepšeními

Petr Krčmář

Vývojáři uvolnili novou verzi shellu Bash s číselným označením 5.0. Přináší řadu oprav, ale i mnoho novinek. Vylepšuje například práci s historií, přidává nové užitečné proměnné a lépe odpovídá specifikaci POSIX.

Doba čtení: 2 minuty

Sdílet

Bash (Bourne Again Shell) vyšel poprvé v roce 1989 jako náhrada Bourne shellu v projektu GNU. Jedná se o implementaci shellu podle standardu IEEE POSIX, která umožňuje interaktivní provádění příkazů, psaní skriptů a řízení úloh (jobs). Po deseti letech (!) od vydání předchozí major verze bylo oznámeno vydání Bash 5.0.

Nová verze opravuje chyby z předchozího vydání Bash 4.4. Podařilo se nalézt problémy se správou paměti nebo odstranit problémy s expanzí $@ a $* v některých kontextech. Bash by měl být také v lepším souladu s normou POSIX v některých okrajových případech.

Novinka také přidává celou řadu nových vlastností. Kompletní seznam změn naleznete v opravdu hodně dlouhém seznamu, který má celkem téměř deset tisíc řádek a novinky pro verzi 5.0 z toho zabírají asi 800 řádek. Podíváme se společně na to nejdůležitější, co nová verze přinesla.

Nové proměnné

Proměnná BASH_ARGV0 obsahuje název shellu nebo skriptu, podobně jako  $0.

Proměnná EPOCHSECONDS obsahuje počet sekund unixové epochy, takzvaný unixový čas.

Proměnná EPOCHREALTIME obsahuje unixový čas, podobně jako EPOCHSECONDS. Na rozdíl od něj jde ale o údaj udávaný s mikrosekundovou přesností reprezentovaný desetinným číslem.

Proměnné HISTSIZE je nově možné nastavovat výchozí hodnotu už během kompilace.

Nové vlastnosti

Příkaz history dokáže odstraňovat celé skupiny záznamů reprezentované rozsahem. Použijte -d start-end. Rovněž rozumí záporným argumentům, které reprezentují pořadí záznamu od konce.

Součástí zdrojových kódů je soubor config-top.h, ve kterém je možné nově definovat statický obsah proměnné $PATH. Obsahem se pak přepíše obsah proměnné prostředí při startu shellu. To se hodí v restriktivních nasazeních.

Ve stejném konfiguračním souboru je pak možné zapnout volbu, která způsobí automatické odesílání záznamů z historie do syslogu.

Volba globasciiranges je nyní ve výchozím stavu zapnutá, vypnout je možné ji během kompilace. Předchází problémům s nečekaným abecedním pořadím v některých locales.

Nová užitečná volba assoc_expand_once dovoluje jen jednu expanzi prvků asociativního pole, jsou-li použity například uvnitř aritmetického výrazu.

Vestavěný příkaz wait má nyní parametr -f, který umožňuje čekat na ukončení specifikované úlohy nebo procesu.

Nekompatibilní změny

Dejte pozor na to, že některé změny zanášejí nekompatibilitu mezi verzemi 4.4 a 5.0. Bylo například upraveno chování zpracování proměnné nameref, která se tak může v některých případech chovat jinak. Brání například vytváření proměnných s nevalidními jmény.

Diners Vánoce 2019

Při zapnutém debuggovacím režimu shell nastavuje jen proměnné BASH_ARGC a BASH_ARGV. Staré chování lze vynutit volbou, ale předání velkého množství proměnných může vést k výkonnostním problémům.

Podrobnosti o všech změnách naleznete v dokumentaci, která byla také aktualizována. Chet Ramey poznamenává, že se snažil minimalizovat dopady změn, které zavádějí nekompatibilitu.