Hjemmeside » hvordan » Når er det bedre å bruke #! / Bin / bash I stedet for #! / Bin / sh i et Shell Script?

    Når er det bedre å bruke #! / Bin / bash I stedet for #! / Bin / sh i et Shell Script?

    Når du oppretter et nytt skalskript, vil du sørge for at det er så problemfritt som mulig, men noen ganger kan det være litt forvirrende å vite hvilken shebang er den beste for deg å bruke. På den måten har dagens SuperUser Q & A-post svaret på en forvirret leser spørsmål.

    Dagens Spørsmål & Svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en fellesskapsdrevet gruppering av Q & A-nettsteder.

    Spørsmålet

    SuperUser leser Hendre vil vite når det er bedre å bruke #! / Bin / bash i stedet for #! / Bin / sh i shell-skript:

    Når er det mer hensiktsmessig å bruke #! / Bin / bash heller enn #! / Bin / sh i et shell-skript?

    Når er det bedre å bruke #! / Bin / bash i stedet for #! / Bin / sh i et shell-skript?

    Svaret

    SuperUser bidragsyter gravitasjon har svaret for oss:

    Kort oppsummert:

    • Det finnes flere skall som implementerer en superset av POSIX sh-spesifikasjonen. På forskjellige systemer, / Bin / sh kan være en lenke til aske, bash, dash, ksh, zsh, etc. Det vil alltid være sh-kompatibelt skjønt, aldri csh eller fisk.
    • Så lenge du holder fast i sh-funksjoner, kan du (og sannsynligvis også) bruke #! / Bin / sh og manuset skal fungere fint, uansett hvilket skall det er.
    • Hvis du begynner å bruke bash-spesifikke funksjoner (dvs. arrayer), bør du spesifikt be om bash fordi, selv om / Bin / sh Kaller allerede bash på systemet ditt, det er kanskje ikke på alle andres system, og skriptet ditt vil ikke løpe der. Det samme gjelder for zsh og ksh, selvfølgelig.
    • Selv om skriptet kun er til personlig bruk, kan det hende du merker at enkelte operativsystemer endres / Bin / sh under oppgraderinger. For eksempel var det på Debian som det var bash, men ble senere erstattet med den svært små dash. Skript som brukte bashisms men hadde #! / Bin / sh plutselig brøt.

    Derimot:

    • Til og med #! / Bin / bash er det ikke riktig. På forskjellige systemer kan bash leve i / Usr / bin, / Usr / pkg / bin, eller / Usr / local / bin.
    • Et mer pålitelig alternativ er #! / usr / bin / env bash, som bruker $ PATH. Selv om ENV-verktøyet selv ikke er strengt garantert heller, / Usr / bin / env jobber fortsatt på flere systemer enn / Bin / bash gjør.

    Har du noe å legge til forklaringen? Lyder av i kommentarene. Vil du lese flere svar fra andre tech-savvy Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her.

    Bilde Kreditt: Wikipedia