Chtěl jsem vědět, zda jsou skripty napsané pro dash, ash a sh 100% kompatibilní?
Existují nějaké přidané funkce pomlčka nebo popel nebo změna syntaxe?
Z toho, co jsem slyšel, je ash přímým potomkem sh.
Komentáře
Odpověď
Krátká odpověď je ne, oni „nejsme 100% kompatibilní.
Většina skořápek je však velmi blízká základní, takže byste jen zřídka narazili na nesrovnalosti. Ve skutečnosti většina skořápek se příliš neliší přidanou syntaxí, ale některými dalšími funkcemi, jako je doplňování karet a podobné.
Také dash
je jakýmsi potomkem ash
— nebo port z BSD do Linuxu, abych byl přesný. A všichni by měli být potomci nebo různé implementace sh
. Ve skutečnosti sh
je na většině systémů pouze symbolický odkaz na bash
, dash
nebo na něco jiného. Důležitá je shoda s POSIX — a při psaní skriptů podle standardů se nedostanete do problémů.
Rozdíl mezi těmito skořápkami spočívá v optimalizacích a výkon. Jsou „méně bohaté na funkce než bash
, ale jsou to plně legitimní skořápky. Bash je pro interaktivní práci bohatý na funkce, ale například využívá více paměti.
Komentáře
- Ale pro použití skriptu jsou kompatibilní?
- A pokud jde o shodu s POSIX, i když se řídím tímto standardem, pokud je napsán skript pro Bash, nemyslím si, že bude fungovat na jakémkoli sh nebo jeho potomkovi.
- Měli by být kompatibilní pokud ' nepoužíváte některé nejasné funkce. Pokud ale používáte bash skript, můžete narazit na další potíže.
- nikdy neměl v úmyslu použít bash s sh nebo ash nebo dash. Co jsou to za obskurní funkce?
- mnoho z novějších funkcí bash ' je doplněním POSIXu, takže je stále pravděpodobnější, že pokud ' znovu je používám. IIRC ani konstrukt [[]] není v sh. Pamatujte také, že pokud ' nepíšete čistý shell skript, vstupují do hry také rozdíly v nástrojích (různé verze sed, grep, awk …).
Odpověď
Je třeba zmínit, že na některých systémech, zejména Debian, / bin / ash není k dispozici:
$ type ash dash bash: type: ash: not found dash is /bin/dash
Komentáře
- Mohou mít ashbox busyboxu.
- To znamená, že existuje mnoho systémů, které ' nemají ani
bash
.
man ash
checkbashisms
můžete otestovat, zda je váš skript kompatibilní s POSIX.