Domovská » jak » Kdy je lepší použít #! / Bin / bash Namísto #! / Bin / sh v Shell Script?

    Kdy je lepší použít #! / Bin / bash Namísto #! / Bin / sh v Shell Script?

    Když vytváříte nový shellový skript, měli byste se ujistit, že je to jako problém bez problémů, ale někdy to může být trochu matoucí, abyste věděli, který shebang je nejlepší pro použití. Dnešní příspěvek SuperUser Q & A obsahuje odpověď na otázku zmateného čtenáře.

    Dnešní zasedání Otázky a odpovědi nás přichází s laskavým svolením SuperUser - podřízené rozdělení Stack Exchange, které je založeno na komunitě prostřednictvím skupin webových stránek.

    Otázka

    Čtecí zařízení SuperUser Hendre chce vědět, kdy je lepší používat #! / bin / bash namísto #! / bin / sh ve skriptech shellu:

    Kdy je vhodnější použít #! / bin / bash spíše než #! / bin / sh v shellu skriptu?

    Kdy je lepší použít #! / bin / bash namísto #! / bin / sh v shellu skriptu?

    Odpověď

    Příspěvek Grawity přispěvatele SuperUser má pro nás odpověď:

    Ve zkratce:

    • Existuje několik skořepin, které implementují nadmnožinu specifikace POSIX sh. Na různých systémech, / bin / sh může být odkazem na popel, bash, pomlčka, ksh, zsh atd. Vždy bude sh-kompatibilní ačkoli nikdy csh nebo ryby.
    • Dokud se budete držet pouze funkcí sh, můžete (a pravděpodobně dokonce i) použít #! / bin / sh a skript by měl fungovat dobře, bez ohledu na to, co je to shell.
    • Pokud začnete používat funkce specifické pro bash (tj. Pole), měli byste specificky požádat o bash, protože i když / bin / sh již vyvolává bash na vašem systému, nemusí být v systému ostatních a váš skript zde nebude fungovat. Totéž platí pro zsh a ksh, samozřejmě.
    • I když je skript určen pouze pro osobní použití, můžete si všimnout, že se některé operační systémy mění / bin / sh během upgradu. Například v Debianu bývalo bash, ale později byl nahrazen velmi minimální pomlčkou. Skripty, které používaly bashismy, ale měly #! / bin / sh najednou se zlomil.

    Nicméně:

    • Dokonce #! / bin / bash není to tak správné. Na různých systémech může být bash žít / usr / bin, / usr / pkg / bin, nebo / usr / local / bin.
    • Spolehlivější možnost je #! / usr / bin / env bash, který používá $ PATH. I když samotný env nástroj není ani striktně zaručen, / usr / bin / env stále pracuje na více systémech než / bin / bash dělá.

    Musíte něco přidat k vysvětlení? Vyjměte v komentářích. Chcete se dozvědět více odpovědí od ostatních uživatelů technologie Stack Exchange? Podívejte se na celý diskusní příspěvek zde.

    Image Credit: Wikipedia