Újdonságok a Bash 5.3-ban: gyorsabb parancshelyettesítés, GLOBSORT rendezés, új tab-kiegészítés, C23-kompatibilitás

Segítséget kaptál? Szívesen töltöd itt az idődet? Visszajársz hozzánk? Támogasd a munkákat: Ko-fi és Paypal!

kami911 képe

Három évvel a Bash 5.2 után, hosszas bétatesztelési időszakot követően megjelent a világ legnépszerűbb Unix-szerű rendszerekhez készült parancssori értelmezőjének új verziója, a Bash 5.3. A kiadás számos érdekes újítást hoz, különösen a fejlettebb szkriptek és rendszerszintű automatizálás kedvelői számára. A legfontosabb újítás a két új parancshelyettesítési forma (command substitution):

  • ${ command; }
  • ${|command;}

Ezek a szintaxisok nem külön gyerekfolyamatban (child process) futtatják a megadott parancsot, hanem a jelenlegi shell környezetben (current shell context). Ez azt jelenti, hogy például egy ciklusban futtatott parancs kimenetét sokkal kisebb erőforrásigénnyel lehet feldolgozni, mivel elmarad a klasszikus fork és pipe művelet. Az új formák lehetővé teszik azt is, hogy a parancs kimenete a REPLY változóba kerüljön anélkül, hogy alfolyamatra lenne szükség – ez beágyazott rendszereken (embedded systems) vagy nagy teljesítményigényű szkripteknél rendkívül hasznos lehet.

Új globális változó: GLOBSORT

A GLOBSORT nevű új shell-változó segítségével a fájlnevek globális kiterjesztésének (pathname expansion, más néven „globbing”) sorrendje vezérelhető. A sorrendezés történhet:

  • fájlnév szerint (name),
  • fájlméret szerint (size),
  • különféle időbélyegek (timestamps) alapján,
  • vagy akár sorrendezés nélkül is (unsorted).

Továbbá meghatározható, hogy a lista növekvő vagy csökkenő sorrendben jelenjen meg. Ez lehetővé teszi például, hogy egy szkript először a legújabb vagy legnagyobb fájlokat dolgozza fel.

Újdonságok a beviteli és kiegészítési funkciókban

A haladó felhasználók számára, akik sokat dolgoznak tab-kiegészítéssel, két fontos újítás érkezett:

  • compgen -V: A compgen parancs most már képes az automatikusan generált kiegészítéseket egy változóba tölteni közvetlenül, ami új lehetőségeket nyit a dinamikus szkriptek előtt.
  • read -E: A read parancs mostantól használja a Readline programozható kiegészítési rendszerét, amikor interaktív bemenetet kérünk a felhasználótól.

További hasznos újítás a source -p PATH parancs, amellyel explicit keresési útvonalon „forrásolhatjuk” (dot source) a kísérő fájlokat, nem csak a megszokott $PATH segítségével.

Megfelelés a C23 szabványnak

A Bash 5.3 forráskódja immár megfelel a legújabb C23 szabványnak (a C programozási nyelv 2023-as szabványa). Ez azonban azt is jelenti, hogy a régi K&R típusú C fordítók (mint amilyeneket még a 80-as években használtak) már nem képesek lefordítani a kódot. Ez a legtöbb modern Linux-disztribúció számára nem jelent problémát, de figyelmeztetés a régi rendszerek és toolchain-ek használóinak, hogy ideje továbblépni.

Readline 8.3 is megjelent – új funkciókkal

A Bash-hoz szorosan kapcsolódó Readline 8.3 könyvtár is ezzel egy időben jelent meg. A Readline egy interaktív parancssori szerkesztőt biztosít, amelyet sok más program is használ. Az új verzió újdonságai:

  • Kis- és nagybetűérzéketlen keresés (search-ignore-case),
  • Programból meghívható parancs-végrehajtás (execute-named-command),
  • Kiegészítési adatok exportálása más programok számára (export-completions).

Ez a frissítés főként azokat érinti, akik saját shell-szerkesztőt vagy interaktív CLI-t fejlesztenek.

A forráskód már letölthető, további információk a levelezőlistán.