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.
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.