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