mi a különbség #!/ bin / sh és #!/ bin / bash?

Linuxon és más Unix-szerű rendszereken többféle héj közül választhat.

a shell nem csak a kis prompt megrajzolásáért felelős, hanem a parancsok értelmezéséért is, különösen akkor, ha bonyolult logikát, például csöveket, feltételeket stb.

a Bash a leggyakoribb shell, amelyet alapértelmezett héjként használnak a Linux rendszerek felhasználói számára. Ez a UNIX történetében használt más héjak szellemi leszármazottja. A neve, a Bash a Bourne-Again Shell rövidítése, tisztelgés a Bourne héj előtt, amelyet úgy terveztek, hogy helyettesítse, bár magában foglalja a C héj és a Korn héj jellemzőit is.

ez fut, ezekben a napokban, a /bin/bash – minden rendszer bash lesz elérhető itt.

azonban nem csak a felhasználók használnak héjakat. A szkripteknek (shell szkripteknek) héjakra van szükségük azok értelmezéséhez. Shell parancsfájl futtatásakor a rendszernek el kell indítania egy shell folyamatot a parancsfájl végrehajtásához.

a probléma az, hogy a különböző héjak között apró ellentmondások vannak, és amikor a szkriptek futtatásáról van szó, ezek valódi problémát jelenthetnek. a bash elég sok szkriptfunkcióval rendelkezik, amelyek csak a bash számára egyediek, más héjakra nem. Ez rendben van, ha mindig a bash-t fogja használni a szkriptek futtatásához. Más héjak megpróbálhatják utánozni a bash-t, vagy betarthatják a POSIX szabványt, amelyet a Bash elég jól támogat (bár hozzáadja a saját kiterjesztéseit).

a parancsfájl tetején megadható, hogy melyik shellt kell futtatni egy shebang segítségével. A parancsfájl az első sorban megadhatja a #!/bin/bash értéket, ami azt jelenti, hogy a szkriptet mindig bash-szal kell futtatni, nem pedig egy másik héjat.

/bin/sh egy futtatható képviselő a rendszer shell. Valójában általában szimbolikus linkként valósul meg, amely a futtatható fájlra mutat, amelyik a rendszerhéj. A rendszerhéj egyfajta alapértelmezett héj, amelyet a rendszerszkripteknek használniuk kell. A Linux disztribúciókban sokáig ez általában szimbolikus link volt a bash – hoz, olyannyira, hogy kissé konvencióvá vált, hogy a /bin/sh-t mindig a bash-hoz vagy egy bash-kompatibilis héjhoz kapcsolják. Azonban az elmúlt néhány évben a Debian (és az Ubuntu) úgy döntött, hogy a rendszerhéjat bash – ról dash – ra váltja-egy hasonló héj-törés, amelynek hosszú hagyománya van a Linuxban (nos, GNU) a bash /bin/sh használatához. A Dash egy könnyebb és sokkal gyorsabb shell, amely hasznos lehet a rendszerindítási sebesség szempontjából (és más olyan dolgok, amelyek sok shell szkriptet igényelnek, mint például a csomagtelepítési szkriptek).

a Dash meglehetősen jól kompatibilis a bash-szal, ugyanazon a POSIX szabványon alapul. Azonban nem valósítja meg a bash-specifikus kiterjesztéseket. Vannak olyan szkriptek, amelyek #!/bin/sh (a rendszerhéj), mint a shebang, de amelyek megkövetelik bash-specifikus kiterjesztések. Ez jelenleg egy hiba, amit a Debian és az Ubuntu javít, akiknek szükségük van a / bin / sh-ra, hogy képesek legyenek dolgozni, amikor a dash-re mutatnak.

annak ellenére, hogy az Ubuntu rendszerhéjja dash-ra mutat, a bejelentkezési héj, mint felhasználó, továbbra is bash. Vagyis amikor bejelentkezik egy terminálemulátorba bárhol a Linuxban, a bejelentkezési héja bash lesz. A működés sebessége nem annyira probléma, ha a shell-t interaktívan használják, és a felhasználók ismerik a bash-t (és lehetnek bash-specifikus testreszabások a saját könyvtárukban).

mit kell használni szkriptek írásakor

ha a szkript csak a bash által támogatott funkciókat igényli, használja a #!/bin/bash parancsot.

de ha egyáltalán lehetséges, jó lenne megbizonyosodni arról, hogy a szkript POSIX-kompatibilis-e, és használni a #!/bin/sh – et, amelynek mindig, meglehetősen megbízhatóan, a preferált POSIX-kompatibilis rendszerhéjra kell mutatnia minden telepítésnél.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.