Zijn dash-, ash- en sh-script 100% compatibel?

Ik wilde weten of scripts geschreven voor dash, ash en sh 100% compatibel zijn?

Zijn er extra functies aan streepje of ash, of syntaxiswijziging?

Van wat ik heb gehoord, is ash een directe afstammeling van sh.

Reacties

  • as is een gestreepte vorm van bash
  • Bron? Ik zag niets dat zei dat ash gerelateerd is aan bash.
  • Waarom zouden mensen niet ' t mensen gewoon patches naar bash sturen in plaats van allerlei soorten shells te maken, dat maakt me kapot altijd. Als je het echt wilt weten, lees dan de handleiding, bijv. man ash
  • Correct, het ' is geen afstammeling van bash. Het zou nauwkeuriger zijn om te zeggen dat ze ' afstammen van sh (de originele Bourne-shell), maar dat ' ook niet helemaal correct is .
  • U kunt het hulpprogramma checkbashisms gebruiken om te testen of uw script POSIX-compatibel is.

Antwoord

Het korte antwoord is nee, ze “re niet 100% compatibel.

Maar de meeste shells zijn redelijk dicht bij de basis, dus je zou maar zelden inconsistenties tegenkomen. de meeste shells verschillen niet veel door toegevoegde syntaxis, maar door enkele extra functies zoals tab-completering en dergelijke.

Bovendien is dash een soort afstammeling van ash — of port van BSD naar Linux, om precies te zijn. En ze zouden allemaal afstammelingen of verschillende implementaties moeten zijn van sh. In feite sh is op de meeste systemen slechts een symbolische link naar bash, dash of iets anders. Waar het om gaat is POSIX-compliance — en wanneer u scripts schrijft volgens de standaarden, zult u “geen problemen tegenkomen.

Het verschil tussen die shells zit in optimalisaties en prestaties. Ze “zijn minder rijk aan functies dan bash, maar het zijn volledig legitieme shells. Bash is rijk aan functies voor interactief werk, maar gebruikt bijvoorbeeld meer geheugen.

Opmerkingen

  • Maar voor scriptgebruik zijn ze compatibel?
  • En over de POSIX-conformiteit, zelfs als ik die standaard volg, als er een script is geschreven voor Bash, denk ik niet dat het zal draaien op een sh of zijn afstammeling
  • Ze zouden compatibel moeten zijn met elkaar als je ' geen enkele obscure functies gebruikt. Maar als je bash-script gebruikt, kun je meer problemen tegenkomen.
  • was nooit van plan om bash te gebruiken met sh of ash of dash. Wat zijn die obscure functies?
  • veel van de nieuwere functies van bash ' zijn toevoegingen ten opzichte van POSIX, dus het wordt steeds waarschijnlijker dat je niet-draagbare code schrijft als je ' ze opnieuw te gebruiken. IIRC, zelfs het [[]] construct is niet in sh. Let er ook op dat als je ' niet een puur shellscript schrijft, er ook verschillen in tools een rol spelen (verschillende versies van sed, grep, awk …).

Answer

Er moet worden vermeld dat op sommige systemen, met name Debian, / bin / ash is niet beschikbaar:

$ type ash dash bash: type: ash: not found dash is /bin/dash 

Reacties

  • Ze kunnen een busybox-as hebben.
  • Dat gezegd hebbende, er zijn veel systemen die geen ' en bash ook niet hebben.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *