30Jul
Når du lager et nytt skallskript, vil du 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å dette notatet har dagens SuperUser Q & A-innlegg 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 i stedet for #!/bin/ sh i et shell script?
Når er det bedre å bruke #!/bin/ bash i stedet for #!/bin/ sh i et skalskript?
Svaret
SuperUser-bidragsgravitasjonen har svaret for oss:
Kort sagt:
- Det finnes flere skall som implementerer en supersett 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-kompatibel, men 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 allerede påberoper bash på systemet ditt, kan det ikke være på alle andres system, og manuset 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 endrer /bin/ sh under oppgraderinger. For eksempel var det på Debian det å være bash, men ble senere erstattet med den svært små dash. Skript som brukte bashisms men hadde #!/bin/ sh plutselig brøt.
Men:
- Selv #!/bin/ bash er ikke så 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, virker /usr/bin/ env 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.
Image Credit: Wikipedia