Početna » kako da » Kada je bolje koristiti #! / Bin / bash Umjesto #! / Bin / sh u Shell skripti?

    Kada je bolje koristiti #! / Bin / bash Umjesto #! / Bin / sh u Shell skripti?

    Kada stvarate novu skriptu ljuske, želite se uvjeriti da je problem što je moguće bez problema, ali ponekad može biti pomalo zbunjujuće znati koji je shebang najbolji za korištenje. Na toj bilješci, današnji post SuperUser Q&A ima odgovor na zbunjeno pitanje čitatelja.

    Današnja sesija pitanja i odgovora dolazi nam ljubaznošću SuperUser-a, podjele Stack Exchangea, grupiranja web-lokacija za pitanja i odgovore u zajednici.

    Pitanje

    Čitač SuperUser Hendre želi znati kada je bolje koristiti #! / Bin / bash umjesto #! / Bin / sh u skriptama:

    Kada je to prikladnije za korištenje #! / Bin / bash rađe nego #! / Bin / sh u skripti?

    Kada je bolje koristiti #! / Bin / bash umjesto #! / Bin / sh u skripti?

    Odgovor

    Odgovornost suradnika SuperUser ima odgovor za nas:

    Ukratko:

    • Postoji nekoliko ljuski koje implementiraju nadskup POSIX sh specifikacije. Na različitim sustavima, / Bin / sh može biti veza na pepeo, bash, crtica, ksh, zsh, itd. Ipak, uvijek će biti sh-kompatibilna, nikad csh ili riba.
    • Sve dok se pridržavate samo Sh funkcija, možete (i vjerojatno čak i trebate) koristiti #! / Bin / sh i skripta bi trebala raditi dobro, bez obzira na to koja je ljuska.
    • Ako počnete koristiti značajke specifične za bash (tj. Nizove), trebate posebno zahtijevati bash jer, čak i ako / Bin / sh već se poziva na bash na vašem sustavu, možda ne na tuđi sustav, a vaša se skripta tamo neće pokrenuti. Isto vrijedi i za zsh i ksh, naravno.
    • Čak i ako je skripta samo za osobnu upotrebu, možda ćete primijetiti da se neki operacijski sustavi mijenjaju / Bin / sh tijekom nadogradnje. Na primjer, na Debianu je to bio bash, ali je kasnije zamijenjen s vrlo minimalnim crtama. Skripte koje su koristile bashizme, ali su imale #! / Bin / sh iznenada se razbio.

    Međutim:

    • Čak #! / Bin / bash nije točno. Na različitim sustavima, bash bi mogao živjeti / Usr / bin, / Usr / PKG / bin, ili / Usr / local / bin.
    • Pouzdanija opcija je #! / usr / bin / env bash, koja koristi $ PATH. Iako niti sam alat za env nije zajamčen, / Usr / bin / ENV i dalje radi na više sustava nego / Bin / bash se.

    Imate li što dodati objašnjenju? Zvuk isključen u komentarima. Želite li pročitati više odgovora od drugih tehničkih korisnika Stack Exchangea? Pogledajte cjelokupnu temu za raspravu ovdje.

    Kredit za slike: Wikipedia