Hvornår er det bedre at bruge #! / Bin / bash I stedet for #! / Bin / sh i et Shell Script?
Når du opretter et nyt shell script, vil du sikre dig, at det er så problemfrit som muligt, men nogle gange kan det være lidt forvirrende at vide, hvilket shebang er det bedste, du kan bruge. På den måde har dagens SuperUser Q & A-post svaret på en forvirret læsers spørgsmål.
Dagens Spørgsmål & Svar session kommer til os med venlig hilsen af SuperUser-en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.
Spørgsmålet
SuperUser-læser Hendre ønsker at vide, hvornår det er bedre at bruge #! / Bin / bash i stedet for #! / Bin / sh i shell scripts:
Hvornår er det mere hensigtsmæssigt at bruge #! / Bin / bash hellere end #! / Bin / sh i et shell script?
Hvornår er det bedre at bruge #! / Bin / bash i stedet for #! / Bin / sh i et shell script?
Svaret
SuperUser bidragyder grawity har svaret for os:
Kort sagt:
- Der er flere skaller, der implementerer en superset af POSIX sh-specifikationen. På forskellige systemer, / Bin / sh kan være et link til aske, bash, dash, ksh, zsh osv. Det vil altid være sh-kompatibelt dog aldrig csh eller fisk.
- Så længe du holder fast i sh funktioner, kan du (og sandsynligvis endda) bruge #! / Bin / sh og scriptet skal fungere fint, uanset hvilken skal den er.
- Hvis du begynder at bruge bash-specifikke funktioner (dvs. arrayer), skal du specifikt anmode bash fordi, selvom / Bin / sh allerede påberåber bash på dit system, det er måske ikke på alles andres system, og dit script vil ikke løbe der. Det samme gælder for zsh og ksh, selvfølgelig.
- Selvom scriptet kun er til personlig brug, kan du bemærke, at nogle operativsystemer ændrer sig / Bin / sh under opgraderinger. For eksempel var det på Debian det at være bash, men blev senere erstattet med den meget minimale dash. Scripts, der brugte bashisms men havde #! / Bin / sh pludselig brød.
Imidlertid:
- Også selvom #! / Bin / bash er det ikke korrekt. På forskellige systemer kan bash leve i / Usr / bin, / Usr / pkg / bin, eller / Usr / local / bin.
- En mere pålidelig løsning er #! / usr / bin / env bash, som bruger $ PATH. Selv om ENV-værktøjet i sig selv heller ikke er strengt garanteret, / Usr / bin / env arbejder stadig på flere systemer end / Bin / bash gør.
Har du noget at tilføje til forklaringen? Lyde af i kommentarerne. Vil du læse flere svar fra andre tech-savvy Stack Exchange brugere? Tjek den fulde diskussionstråd her.
Billedkredit: Wikipedia