30Jul
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, hvilken shebang der er den bedste til at bruge. På den måde har dagens SuperUser Q & A-indlæg svaret på en forvirret læsers spørgsmål.
Dagens Spørgsmål &Svar session kommer til os høflighed af SuperUser-en underafdeling af Stack Exchange, en community-drevet gruppe af Q & A-websteder.
Spørgsmål
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 snarere 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 bidragydergravity har svaret for os:
Kort sagt:
- Der er flere skaller, der implementerer et superset af POSIX sh-specifikationen. På forskellige systemer kan /bin/ sh 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, er det 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 /bin/ sh under opgraderinger. For eksempel brugt det på Debian at være bash, men blev senere erstattet med den meget minimale bindestreg. Scripts, der brugte bashisms men havde #!/bin/ sh pludselig brød.
Men:
- Selv #!/bin/ bash er 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 , der bruger $ PATH .Selv om env-værktøjet selv ikke er strengt garanteret, arbejder /usr/bin/ env 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