sh vs. bash : Összefoglaló
Ha ezt olvasod, akkor jó eséllyel találkoztál már a shell, sh, bash stb. kifejezésekkel. Ezek a kifejezések zavaróan hangozhatnak, és mivel szorosan kapcsolódnak egymáshoz, ez tovább rontja a problémát. Ezért úgy döntöttem, hogy megírom ezt a bejegyzést azzal a céllal, hogy megpróbálom elmagyarázni a köztük lévő különbségeket.
Shell vs Kernel
Mielőtt továbbmennénk, fontos, hogy megértsük, mit jelentenek a shell és a kernel kifejezések.
Kernel
A kernel az operációs rendszer központja. Olyan dolgokért felelős, mint a hardverrel való interakció, a fájl I/O végrehajtása és a folyamatok indítása.
Shell
A shell interfészként működik a felhasználó és a kernel között. Technikailag a shell egy parancssor-értelmező, azaz az a program, amely vagy a terminálemulátorban beírt parancsot értelmezi (interaktív mód), vagy shell-szkripteket (parancsokat tartalmazó szövegfájlokat) dolgoz fel.
Most, hogy már tudjuk, mi a shell és a kernel, megpróbálhatjuk megérteni a sh-t és a Bash-t.
sh
A sh (vagy Shell Command Language) szigorúan véve a POSIX szabvány által leírt programozási nyelv. A kulcs itt az, hogy a sh önmagában nem igazán programozási nyelv. Ez csak egy specifikáció. A specifikáció az adott nyelv szintaxisának és szemantikájának részletes leírása. A specifikáció nem tartalmaz implementációt.
Bash
A különböző operációs rendszerek saját héjakkal és kernellel rendelkeznek. A Bash a GNU operációs rendszer héja. De azt is mondhatjuk, hogy a bash egy programozási nyelv.
Várjunk csak, nem zavaró? A bash egyszerre shell és programozási nyelv?
Gondoljunk csak a pythonra. A Pythont is elindíthatjuk interaktív módban, és úgy viselkedik, mint egy shell. Vagy JavaScript, vagy Ruby, vagy bármilyen szkriptnyelv.
Van értelme?
A bash tehát egy olyan programozási nyelv, amelyet a sh implementációjának tekinthetünk (bár ez idővel megváltozott).
Összefoglalva, a sh egy specifikáció, a bash az implementáció.