/ / 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-er-det-bedre å bruke-bin-bash-stedet-for-bin-sh-i-en-shell-skript-00

Når du lager et nytt skallskript, gjør du detvil sørge for at det er så problemfritt som mulig, men noen ganger kan det være litt forvirrende å vite hvilken shebang som er den beste for deg å bruke. På den lappen har dagens SuperUser Q & A-innlegg svaret på et forvirret lesers spørsmål.

Dagens spørsmål og svar øker oss med tillatelse fra SuperUser - en underavdeling av Stack Exchange, en samfunnsdrevet gruppe av spørsmål og svar på nettsteder.

Spørsmålet

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

Når er det mer passende å bruke #! / Bin / bash heller enn #! / Bin / sh i et skallskrift?

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

Svaret

SuperUser-bidragsyter grawity har svaret for oss:

Kort oppsummert:

  • Det er flere skall som implementerer et supersett av POSIX sh-spesifikasjonen. På forskjellige systemer, / Bin / sh kan være en kobling til aske, bash, dash, ksh, zsh, etc. Det vil alltid være sh-kompatibel, aldri csh eller fisk.
  • Så lenge du bare holder deg til sh-funksjoner, kan du (og sannsynligvis også burde) bruke det #! / Bin / sh og manuset skal fungere fint, uansett hvilket skall det er.
  • Hvis du begynner å bruke bash-spesifikke funksjoner (dvs. matriser), bør du spesifikt be om bash fordi, selv om / Bin / sh allerede påkaller bash på systemet ditt, det kan ikke hende at det er på andres system, og skriptet ditt vil ikke kjøres der. Det samme gjelder selvfølgelig zsh og ksh.
  • Selv om skriptet kun er til personlig bruk, kan du legge merke til at noen operativsystemer endres / Bin / sh under oppgraderinger. For eksempel, på Debian pleide det å være bash, men ble senere erstattet med den veldig minimale streken. Skript som brukte bashismer men hadde #! / Bin / sh brått plutselig.

Men:

  • Til og med #! / Bin / bash er ikke så riktig. På forskjellige systemer kan det hende bash lever 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 selve env-verktøyet heller ikke er strengt garantert, / Usr / bin / env fungerer fortsatt på flere systemer enn / Bin / bash gjør.

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

Bildekreditt: Wikipedia