Am vrut să știu dacă scripturile scrise pentru liniuță, cenușă și sh sunt 100% compatibile?
Există caracteristici adăugate la liniuță sau cenușă, sau schimbare de sintaxă?
Din câte am auzit, cenușă este un descendent direct al lui sh.
Comentarii
Răspuns
Răspunsul scurt este nu, ei „nu este 100% compatibil.
Dar majoritatea cochiliilor sunt destul de apropiate de cele de bază, deci nu vă veți confrunta decât rareori cu inconsecvențe. De fapt, majoritatea shell-urilor diferă nu prea mult prin sintaxa adăugată, ci prin unele caracteristici suplimentare, cum ar fi completarea tabului și altele similare.
De asemenea, dash
este un fel de descendent al ash
— sau port de la BSD la Linux, pentru a fi precis. Și toate acestea ar trebui să fie descendenți sau diferite implementări ale sh
. De fapt, sh
este pe majoritatea sistemelor doar un link simbolic către bash
, dash
sau altceva. Ceea ce contează este conformitatea POSIX — și atunci când scrieți scripturi conform standardelor, nu veți avea probleme.
Diferența dintre aceste shell-uri este în optimizări și performanță. Acestea sunt mai puțin bogate în caracteristici decât bash
, dar sunt shell-uri complet legitime. Bash este bogat în funcții pentru munca interactivă, dar folosește mai multă memorie, de exemplu.
Comentarii
- Dar pentru utilizarea scriptului, acestea sunt compatibile?
- Și despre conformitatea POSIX, chiar dacă respect acel standard, dacă un script este scris pentru Bash, nu cred că va rula pe niciun sh sau descendentul său
- Ar trebui să fie compatibile unul cu celălalt dacă ' nu utilizați unele caracteristici obscure. Dar dacă utilizați script bash, este posibil să întâmpinați mai multe probleme.
- nu a intenționat niciodată să utilizați bash cu sh sau ash sau dash. Care sunt acele caracteristici obscure?
- multe dintre caracteristicile mai noi ale lui bash ' sunt adăugiri peste POSIX, deci este din ce în ce mai probabil să scrieți codul neportabil dacă ' le folosești. IIRC chiar și constructul [[]] nu este în sh. Atenție, de asemenea, că, dacă ' nu scrieți un script shell pur, diferența de instrumente intră în joc și (versiuni diferite de sed, grep, awk …).
Răspuns
Trebuie menționat faptul că pe unele sisteme, în special Debian, / bin / ash nu este disponibil:
$ type ash dash bash: type: ash: not found dash is /bin/dash
Comentarii
- Este posibil să aibă cenusa ocupată.
- Acestea fiind spuse, există multe sisteme care nu ' nu au nici
bash
.
man ash
checkbashisms
pentru a testa dacă scriptul dvs. este conform POSIX.