Kdaj je bolje uporabiti #! / Bin / bash Namesto #! / Bin / sh v Shell Scriptu?
Ko ustvarjate nov skript lupine, se prepričajte, da je čim manj problematičen, včasih pa je lahko malce zmedeno vedeti, kateri shebang je najboljši za uporabo. Na tej opombi ima današnja poštna številka SuperUser Q&A odgovor na zmedeno vprašanje bralca.
Današnja seja vprašanj in odgovorov prihaja z namenom SuperUser-a, ki je del skupine Stack Exchange, ki temelji na skupnostih spletnih mest za vprašanja in odgovore.
Vprašanje
Bralnik SuperUser Hendre želi vedeti, kdaj je bolje uporabiti #! / bin / bash namesto #! / bin / sh v skriptih lupine:
Kdaj je bolj primerna za uporabo #! / bin / bash raje kot #! / bin / sh v skriptu?
Kdaj je bolje uporabiti #! / bin / bash namesto #! / bin / sh v skriptu?
Odgovor
Odzivnik SuperUser je odgovoren za nas:
V kratkem:
- Obstaja več lupin, ki izvajajo nadgradnjo specifikacije POSIX sh. Na različnih sistemih, / bin / sh morda je povezava s pepelom, bash, dash, ksh, zsh itd. Vendar bo vedno sh-združljiva, nikoli csh ali ribe.
- Dokler se držite le funkcij sh, lahko (in verjetno celo morate) uporabiti #! / bin / sh in skript bi moral delovati dobro, ne glede na to, katera lupina je.
- Če začnete uporabljati funkcije, značilne za bash (tj. Nizi), morate posebej zahtevati bash, ker tudi če / bin / sh je že priklical bash na vaš sistem, morda ne v sistemu drugih in vaš scenarij se tam ne bo zagnal. Enako velja za zsh in ksh.
- Tudi če je skript samo za osebno uporabo, boste morda opazili, da se nekateri operacijski sistemi spreminjajo / bin / sh med nadgradnjami. Na primer, na Debianu je bila nekoč bash, kasneje pa je bila zamenjana z zelo minimalnim pomišljajem. Skripti, ki so uporabljali bashizme, a so jih imeli #! / bin / sh nenadoma se je zlomil.
Vendar:
- Tudi #! / bin / bash ni tako. Na različnih sistemih bi bash lahko živel / usr / bin, / usr / pkg / bin, ali / usr / local / bin.
- Bolj zanesljiva možnost je #! / usr / bin / env bash, ki uporablja $ PATH. Čeprav tudi orodje env ni strogo zagotovljeno, / usr / bin / env še vedno deluje na več sistemih kot / bin / bash ne.
Imate kaj dodati pojasnilu? Zvok v komentarjih. Želite prebrati več odgovorov drugih uporabnikov tehnologije Stack Exchange? Oglejte si celotno nit razprave tukaj.
Zasluge za slike: Wikipedia