Halusin tietää, ovatko viivalle, tuhkalle ja sh: lle kirjoitetut komentosarjat 100% yhteensopivia?
Onko laitteeseen lisätty ominaisuuksia viiva tai tuhka tai syntaksimuutos?
Kuulemani mukaan ash on sh: n suora jälkeläinen.
Kommentit
vastaus
Lyhyt vastaus on ei, he ”eivät ole 100% yhteensopivia.
Mutta suurin osa kuoreista on melko lähellä perusasioita, joten törmäät vain harvoin epäjohdonmukaisuuksiin. useimmat kuoret eroavat toisistaan vain lisättävän syntaksin, mutta joidenkin lisäominaisuuksien, kuten välilehtien täydentämisen ja vastaavien, suhteen.
Myös dash
on eräänlainen ash
— tai portti BSD: stä Linuxiin, tarkemmin sanottuna. Ja heidän kaikkien tulisi olla . Itse asiassa sh
on useimmissa järjestelmissä vain symlinkki bash
, dash
tai johonkin muuhun. Tärkeää on POSIX-yhteensopivuus — ja kun kirjoitat komentosarjoja standardien mukaisesti, et törmää ongelmiin.
Näiden kuorien ero on optimoinnissa. Ne ovat vähemmän ominaisuuksiltaan rikkaita kuin bash
, mutta ne ovat täysin oikeutettuja kuoria. Bash on monipuolinen interaktiiviseen työhön, mutta käyttää esimerkiksi enemmän muistia.
Kommentit
- Mutta komentosarjojen käyttöä varten ne ovat yhteensopivia?
- POSIX-yhteensopivuudesta, vaikka noudatan kyseistä standardia, jos skripti kirjoitetaan Bashille, en usko, että se toimii millä tahansa sh: llä tai sen jälkeläisillä
- Niiden tulisi olla yhteensopivia toistensa kanssa, jos ' et käytä joitain epäselviä ominaisuuksia. Mutta jos käytät bash-komentosarjaa, saatat kohdata enemmän ongelmia.
- koskaan aikonut käyttää bashia sh: n, tuhkan tai viivan kanssa. Mitkä ovat nämä hämärät ominaisuudet?
- monet bash ': n uudemmista ominaisuuksista ovat lisäyksiä POSIX: n yli, joten on todennäköisempää, että kirjoitat ei-kannettavan koodin, jos ' käytä niitä uudelleen. IIRC, edes [[]] -rakenne ei ole sh. Varo myös, että jos ' ei kirjoita puhdasta komentosarjakomentosarjaa, myös työkaluerot tulevat esiin (eri versiot sedistä, grepistä, awkista …).
vastaus
On syytä mainita, että joissakin järjestelmissä, etenkin Debianissa, / bin / ash ei ole käytettävissä:
$ type ash dash bash: type: ash: not found dash is /bin/dash
kommentit
- Heillä voi olla busybox-tuhkaa.
- Tästä huolimatta on olemassa monia järjestelmiä, joilla ei ' ole
bash
.
man ash
checkbashisms
avulla, että komentosarjasi on POSIX-yhteensopiva.