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
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.
man ash
checkbashisms
gebruiken om te testen of uw script POSIX-compatibel is.