Sunt scripturile dash, ash și sh 100% compatibile?

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

  • cenușa este o formă de bash în dungi
  • Sursă? Nu am văzut nimic care să spună că cenușa este legată de bash
  • De ce nu ' oamenii ar trimite doar patch-uri la bash în loc să creeze tot felul de cochilii, asta mă tamponează tot timpul. Dacă doriți cu adevărat să știți, citiți manualul, de ex. man ash
  • Corect, ' nu este descendent din bash. Ar fi mai precis să spunem că ' sunt descendenți din sh (shell-ul Bourne original), dar că ' nu sunt nici pe deplin corecte .
  • Puteți utiliza utilitarul checkbashisms pentru a testa dacă scriptul dvs. este conform POSIX.

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *