Hemsida » hur » När är det bättre att använda #! / Bin / bash Istället för #! / Bin / sh i ett Shell Script?

    När är det bättre att använda #! / Bin / bash Istället för #! / Bin / sh i ett Shell Script?

    När du skapar ett nytt skalskript vill du se till att det är så problemfritt som möjligt, men ibland kan det vara lite förvirrande att veta vilken shebang är den bästa för dig att använda. På den noteringen har dagens SuperUser Q & A-post svaret på en förvirrad läsares fråga.

    Dagens Question & Answer-session kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.

    Frågan

    SuperUser-läsare Hendre vill veta när det är bättre att använda #! / Bin / bash istället för #! / Bin / sh i skalskript:

    När är det mer lämpligt att använda #! / Bin / bash hellre än #! / Bin / sh i ett skalskript?

    När är det bättre att använda #! / Bin / bash istället för #! / Bin / sh i ett skalskript?

    Svaret

    SuperUser bidragsgravar har svaret för oss:

    Kortfattat:

    • Det finns flera skal som implementerar en superset av POSIX sh-specifikationen. På olika system, / Bin / sh kan vara en länk till aska, bash, dash, ksh, zsh, etc. Det kommer alltid att vara sh-kompatibel men aldrig csh eller fisk.
    • Så länge du håller fast vid Sh-funktionerna kan du (och förmodligen ens borde) använda #! / Bin / sh och manuset ska fungera bra, oavsett vilket skal det är.
    • Om du börjar använda bash-specifika funktioner (dvs arrayer), bör du specifikt begära bash eftersom, även om / Bin / sh ringer redan på ditt system, det kanske inte på alla andras system, och ditt skript kommer inte att springa där. Detsamma gäller för zsh och ksh, naturligtvis.
    • Även om manuset endast är avsett för personligt bruk kanske du märker att vissa operativsystem ändras / Bin / sh under uppgraderingar. Till exempel, på Debian brukade den vara bash, men ersattes senare med den mycket minimala streckkoden. Skript som använde bashism men hade #! / Bin / sh plötsligt bröt.

    Dock:

    • Även #! / Bin / bash Det är inte så korrekt. På olika system kan bash leva i / Usr / bin, / Usr / pkg / bin, eller / Usr / local / bin.
    • Ett mer tillförlitligt alternativ är #! / usr / bin / env bash, vilken använder $ PATH. Även om env-verktyget själv inte är strikt garanterat heller, / Usr / bin / env arbetar fortfarande på fler system än / Bin / bash gör.

    Har du något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.

    Bildkredit: Wikipedia