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
/bin
a zjistil jsem, žesh
je spíše symbolický odkaz nadash
než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
bash
adash
? - Oba používají syntaxi prostředí Bourne. Jak jsem napsal ve své odpovědi,
dash
je čistá implementace standardu prostředí POSIX. Na druhou stranubash
je prostředí s poměrně velkým množstvím rozšíření a nestandardními funkcemi, některé inspirovanéksh
,ksh93
a 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
$SHELL
se nepoužívá k rozhodnutí, jaký shell bude interpretovat./executable
skript. To ' nutně neříká, jaký je aktuální shell.