A bash és a sh másképp hajtanak végre egy szkriptet? Végrehajtottam egy shell parancsfájlt bash-val és sh-vel, és ugyanazt a kimenetet kaptam. Tehát mi a különbség?
Ezenkívül, amikor éppen futtatja az ./executable
fájlt, bash-t vagy sh-t használ?
Megjegyzések
Válasz
Ez a futtatott rendszertől függ. Egy sok operációs rendszer, különösen Linux alapú, sh
egy link a bash
linkre.
Ilyen esetben ott van még mindig vannak olyan viselkedési különbségek, ahol bash
megpróbál inkább hasonlítani a hagyományos bourne-héjra, ha sh
-nek hívják, de mégis elfogadja a legtöbb basizmust. / p>
Néhány más operációs rendszeren, például a Debian-alapúakon, a sh
szolgáltatást a dash
szolgáltatja, nem pedig a bash
. Ez sokkal nagyobb különbséget jelent, mivel a dash
nem támogatja a basizmusokat, mivel ezeket tiszta POSIX shell-implementációnak tervezték.
Saját operációs rendszereken a sh
szolgáltatást gyakran egy POSIX-kompatibilis ksh88
szolgáltatja, amely dash
-hez hasonlóan nem hajtja végre a basizmusokat. Solaris 10-es vagy annál régebbi verziókon, attól függően, hogy mi a PATH-ja, a sh
valószínűleg egy régi Bourne-héj lesz, amely megelőzi a POSIX-ot.
Mindenesetre valószínűleg kapott ugyanazt a kimenetet a tesztjével egyszerűen azért, mert a szkript nem használt bash
specifikus parancsot, beállítást vagy szintaxist.
Az , hogy milyen futtatásra kerül a futtatás, lényegében a .executable szkript elején írt shebangtól függ. Ez bash
lesz, ha a shebang megadja:
#!/bin/bash ....
Ha nincs shebang, és meghívod a szkriptet egy POSIX-kompatibilis shellről a parancsfájlt technikailag a PATH-ban található első sh
segítségével kell végrehajtani. Sok shell értelmező, például bash
, dash
és ksh
POSIX-nak tartja magát, így lesz értelmezze a forgatókönyvet. Ne feledje, hogy a SHELL
környezeti változót nem itt használjuk. div id = “3420465ea1″>
és azt tapasztaltam, hogy a sh
szimbolikus link a dash
-re, nem pedig a bash
. Tehát hogyan futottak ugyanúgy? ' nem igazán futott semmilyen bash szkriptparancs, csupán terminálparancsok más csomagok ' eszközök használatához.
bash
között és dash
? dash
a POSIX shell szabvány tiszta megvalósítása. Másrészt a bash
egy héj, amely meglehetősen sok kiterjesztéssel és nem szabványos funkcióval rendelkezik, némelyiket a ksh
, ksh93
és más héjak, valamint néhány bash specifikus, bashizmus néven ismert. Van egy checkbashisms nevű eszköz, amely segít azonosítani mindazt, ami nem szigorúan hordozható egy adott shell scriptben. Válasz
Igen lehet, de nem muszáj. A két héj nem azonos, de az alapok kompatibilisek. További részletekért ellenőrizze ezt a bejegyzést .
A szkriptben a következő sort használhatja a használt tolmács ellenőrzésére:
ps h -p $$ -o args="" | cut -f1 -d" "
Kifejezetten megadhatja azt a héjat, amelyet akkor kell használni, amikor a parancsfájlt közvetlenül végrehajtják a sheebang
sorral:
#!/bin/sh
vagy
#!/bin/bash
$SHELL
változót nem arra használjuk, hogy eldöntsük, melyik shell értelmezi a./executable
forgatókönyv. Ez sem ' nem feltétlenül mondja el, hogy mi az aktuális shell.