A shim egy kis könyvtár, amely elkapja és megváltoztatja egy másik könyvtár hívásait, főként a kompatibilitás elősegítése érdekében.
A kliensek támogatásához szükséges egy könyvtár több verziójának fenntartása. A shim könyvtárak lefordítják a régi könyvtári hívásokat az új könyvtári hívásokra, mielőtt továbbküldik az új könyvtárba.
1. példa:
A Linux telepítések általában egyetlen Ruby verzióval érkeznek. A Ruby fejlesztőknek különböző Ruby verziókra van szükségük a sok aktív projektjükben. Az Rbenv shimeket használ ennek a problémának a megoldására.
A Ruby parancs futtatása Linuxban azt jelenti, hogy az útvonalban ellenőrzi a futtathatót – amit balról jobbra haladva keres. Tehát a Ruby parancs rails server
futtatása azt jelenti, hogy a Linux megtalálja és futtatja a Rails-t, egy Ruby futtatható programot az első könyvtárban.
Rbenv hozzáad egy shims
könyvtárat, és betölti azt shim szkriptekkel, mielőtt a Path-ot előtagolja. Minden Ruby alkalmazáshoz van egy shim szkript, és egy Ruby alkalmazás futtatása mostantól a megfelelő shim szkript futtatását jelenti. Tehát a rails futtatása a shims
könyvtárban lévő Rails szkript futtatását jelenti, nem pedig a usr/local/bin
könyvtárban lévő Rails alkalmazást. A szkript kiszámítja a szükséges Ruby-verziót, majd a hozzá tartozó alkalmazást, jelen esetben a Rails-t, az elvárt Ruby-verzió alatt futtatja.
Példa 2:
A Microsoft shimeket használ az alkalmazás Windows-hívásainak meghamisítására. Amikor egy alkalmazás rendszerhívást hajt végre, az az “Import Address Table”-en keresztül történik.
Megváltoztathatja a táblázatot, és a Windows-hívást egy shim hívásával helyettesítheti. A példában szereplő shim egy ‘version-lie’ shim. Az alkalmazás azt hiszi, hogy egy Windows 7-es gépen van.
shimre átirányított alkalmazáshívás.