Milloin on parempi käyttää #! / Bin / bash -toimintoa Shell-skriptiin #! / Bin / sh n sijaan?
Kun luot uuden shell-komentosarjan, haluat varmistaa, että se on mahdollisimman ongelmaton, mutta joskus se voi olla hieman hämmentävää tietää, mikä shebang on paras käytettäväksi. Tässä muistiinpanossa nykypäivän SuperUser Q&A -postissa on vastaus sekavaan lukijakysymykseen.
Nykypäivän Kysymys- ja vastaus -istunto tulee meille suotuisasti SuperUserin - Stack Exchange -alueen, yhteisöpohjaisen Q & A-sivustojen ryhmittymän - kautta..
Kysymys
SuperUser-lukija Hendre haluaa tietää, milloin on parempi käyttää #! / Bin / bash sijasta #! / Bin / sh shell-skripteissä:
Milloin on sopivampaa käyttää #! / Bin / bash mielummin kuin #! / Bin / sh komentosarjassa?
Milloin on parempi käyttää #! / Bin / bash sijasta #! / Bin / sh komentosarjassa?
Vastaus
SuperUserin tekijän raskaus on meille vastaus:
Lyhyesti:
- On olemassa useita kuoret, jotka toteuttavat POSIX sh -määrityksen supersetin. Eri järjestelmissä, / Bin / sh voi olla linkki tuhkaan, bashiin, viivaan, ksh: hen, zsh: iin jne. Se on kuitenkin aina sh-yhteensopiva, ei koskaan csh tai kala.
- Niin kauan kuin pidät vain sh-ominaisuuksia, voit (ja luultavasti jopa olla) käyttää #! / Bin / sh ja käsikirjoituksen pitäisi toimia hyvin, riippumatta siitä, mikä kuori on.
- Jos käytät bash-spesifisiä ominaisuuksia (eli matriiseja), sinun on erityisesti pyydettävä bashia, koska vaikka / Bin / sh jo kutsuu bash-järjestelmääsi, se ei välttämättä näy kaikkien muiden järjestelmissä, eikä skriptiä näy siellä. Sama pätee tietenkin zsh ja ksh.
- Vaikka skripti on tarkoitettu vain henkilökohtaiseen käyttöön, saatat huomata, että jotkin käyttöjärjestelmät muuttuvat / Bin / sh päivitysten aikana. Esimerkiksi Debianissa se oli aiemmin bash, mutta korvattiin myöhemmin hyvin pienellä viivalla. Skriptit, joissa käytettiin bashismia, mutta joilla oli #! / Bin / sh yhtäkkiä rikkoi.
Kuitenkin:
- Jopa #! / Bin / bash ei ole oikea. Eri järjestelmissä bash voi elää / Usr / bin, / Usr / pkg / bin, tai / Usr / local / bin.
- Luotettavampi vaihtoehto on #! / usr / bin / env bash, joka käyttää $ PATH. Vaikka env-työkalu ei myöskään ole tiukasti taattu, / Usr / bin / env toimii edelleen useammassa järjestelmässä kuin / Bin / bash tekee.
Onko jotain lisättävää selitykseen? Ääni pois kommenteista. Haluatko lukea lisää vastauksia muilta tech-savvy Stack Exchange -käyttäjiltä? Tutustu koko keskusteluketjuun täällä.
Kuvaluotto: Wikipedia