Szeretném tudni, hogy a kötőjelre, az ashra és az sh-re írt szkriptek 100% -ban kompatibilisek-e?
Vannak-e hozzáadott szolgáltatások kötőjel vagy hamu, vagy a szintaxis változása?
Amit hallottam, a ash a sh közvetlen leszármazottja.
Megjegyzések
Válasz
A rövid válasz nem, ők “100% -ban nem kompatibilis.
De a legtöbb héj meglehetősen közel van az alapszinthez, így csak ritkán ütközhetünk ellentmondásokba. a legtöbb héj nem sokban különbözik a hozzáadott szintaxistól, de néhány extra funkciótól, például a tabulátor kitöltésétől és hasonlóaktól.
Emellett az dash
is a ash
— vagy a BSD-ről a portra, egészen pontosan a portra. És mindegyiknek a . Valójában sh
a legtöbb rendszerben csak egy szimbolikus link a bash
, dash
vagy valami máshoz. Fontos a POSIX-megfelelőség —, és amikor szkripteket írsz a szabványoknak megfelelően, nem fogsz problémába ütközni.
A héjak közötti különbség az optimalizálásban rejlik. és teljesítmény. “Kevésbé gazdag funkciókban, akkor bash
, de teljesen legitim héjak. A Bash funkciókban gazdag interaktív munkához, de például több memóriát használ.
Megjegyzések
- De szkripthasználathoz kompatibilisek?
- És a POSIX-megfelelésről, még akkor is, ha követem ezt a szabványt, ha egy szkriptet írunk a Bash számára, akkor nem hinném, hogy bármelyik sh-en vagy annak leszármazottján futni fog.
- Kompatibiliseknek kell lenniük egymással, ha ' nem használ néhány homályos funkciót. De ha bash szkriptet használ, akkor több problémába ütközhet.
- soha nem volt célja, hogy sh vagy hamu vagy kötőjel mellett bash-t használjon. Melyek azok a homályos funkciók?
- a bash ' sok új funkció a POSIX-hoz képest kiegészítés, így egyre valószínűbb, hogy nem hordozható kódot fogsz írni, ha ' használja őket. Az IIRC még a [[]] konstrukció sincs sh. Vigyázzon arra is, hogy ha ' nem ír tiszta shell parancsfájlt, akkor az eszközök közötti különbségek is szóba kerülnek (a sed, grep, awk különböző verziói …).
Válasz
Meg kell említeni, hogy egyes rendszereken, nevezetesen a Debianon, / bin / ash nem érhető el:
$ type ash dash bash: type: ash: not found dash is /bin/dash
megjegyzések
- Lehet, hogy bushoxik vannak.
- Ennek ellenére sok olyan rendszer létezik, amelyek nem rendelkeznek ' t
bash
.
man ash
checkbashisms
segédprogram segítségével tesztelheti, hogy a szkript POSIX-kompatibilis-e.