Provádí bash a sh skript jinak? Provedl jsem shell skript s bash i sh a dostal stejný výstup. V čem je tedy rozdíl?
Také když právě spustíte ./executable, používá bash nebo sh?
Komentáře
Odpověď
To záleží na systému, který používáte. Jeden z mnoha operačních systémů, zejména operačních systémů Linux, sh je odkaz na bash.
V takovém případě existuje stále existují určité rozdíly v chování, kde bash se snaží být více jako tradiční bourne shell, když se nazývá sh, ale stále přijímá většinu bashismů.
V některých jiných operačních systémech, jako jsou systémy založené na Debianu, sh poskytuje dash, nikoli bash. To je mnohem větší rozdíl, protože dash nepodporuje bashismy, protože je navržen jako čistá implementace prostředí POSIX.
V proprietárních operačních systémech často poskytuje POSIX kompatibilní ksh88, který podobně jako dash neimplementuje bashismy. V systému Solaris 10 a starších bude sh v závislosti na vaší PATH pravděpodobně starým Bourneovým shellem, který bude předcházet POSIX.
V každém případě budete pravděpodobně mít stejný výstup s testem jednoduše proto, že váš skript nepoužíval žádný bash konkrétní příkaz, volbu nebo syntaxi.
Když spustíte ./executable, jaký shell bude spuštěn, v zásadě závisí na shebangu napsaném na začátku skriptu .executable. To bude bash, pokud to specifikuje shebang:
#!/bin/bash ....
Pokud neexistuje žádný shebang a zavoláte skript z prostředí kompatibilního s POSIXem by měl být skript technicky proveden prvním sh nalezeným v PATH. Mnoho interpretů prostředí jako bash, dash a ksh se považují za POSIX, takže interpretovat scénář. Proměnná prostředí SHELL se zde nepoužívá.
Komentáře
- Rozhlížel jsem se kolem v
/bina zjistil jsem, žeshje spíše symbolický odkaz nadashnežbash. Jak tedy běžely stejně? Nebylo ' skutečně spuštěno žádné příkazy bash skriptu, pouze příkazy terminálu pro použití jiných nástrojů ' nástrojů. - Pokud váš shell skript právě postupně volá další příkazy, jakýkoli interpreter prostředí jej spustí se stejným výsledkem. Zde nic neočekávaného.
- Toto nesouvisí s otázkou, ale jaký je přesně rozdíl mezi
bashadash? - Oba používají syntaxi prostředí Bourne. Jak jsem napsal ve své odpovědi,
dashje čistá implementace standardu prostředí POSIX. Na druhou stranubashje prostředí s poměrně velkým množstvím rozšíření a nestandardními funkcemi, některé inspirovanéksh,ksh93a další skořápky a některé specifické pro bash, známé jako bashismy. Existuje nástroj s názvem checkbashisms, který pomáhá identifikovat vše, co není v daném shell skriptu přísně přenositelné.
Odpovědět
Ano, mohlo by to být, ale nemusí to tak být. Dvě skořápky nejsou stejné, ale základní informace jsou kompatibilní. Další podrobnosti najdete v tomto příspěvku .
Následující skript můžete použít ke kontrole použitého tlumočníka:
ps h -p $$ -o args="" | cut -f1 -d" "
Můžete explicitně určit shell, který se použije při provádění skriptu přímo pomocí sheebang řádku:
#!/bin/sh
nebo
#!/bin/bash
$SHELLse nepoužívá k rozhodnutí, jaký shell bude interpretovat./executableskript. To ' nutně neříká, jaký je aktuální shell.