hva er forskjellen mellom #!/ bin / sh og #!/ bin / bash?

På Linux og Andre Unix-lignende systemer har du et utvalg av flere skall.

skallet er ansvarlig ikke bare for å tegne din lille ledetekst, men tolke kommandoene dine, spesielt hvis du legger inn komplisert logikk som rør, conditionals og så videre.

bash er det vanligste skallet som brukes som standardskall for Brukere Av Linux-systemer. Det er en åndelig etterkommer av andre skall som brukes i Hele Unix-historien. Navnet bash er en forkortelse Av Bourne-Again Shell, en hyllest Til Bourne skallet Det ble designet for å erstatte, men det inneholder også funksjoner Fra C Skallet og Korn Skallet.

det kjøres, i disse dager, fra /bin/bash – ethvert system med bash vil ha det tilgjengelig her.

det er ikke bare brukere som bruker skall, skjønt. Scripts (shell scripts) trenger skjell for å tolke dem. Når du kjører et skallskript, må systemet starte en skallprosess for å utføre skriptet ditt.

problemet er at forskjellige skall har små små uoverensstemmelser mellom dem, og når det gjelder å kjøre skript, kan disse være et reelt problem. bash har ganske mange skriptfunksjoner som er unike bare for bash, og ikke til andre skall. Dette er greit, hvis du alltid skal bruke bash til å kjøre disse skriptene. Andre skall kan prøve å enten etterligne bash, eller holde SEG TIL POSIX-standarden, som bash støtter ganske bra (men legger til egne utvidelser til).

Det er mulig å spesifisere øverst på et skallskript hvilket skall det skal kjøres med ved hjelp av en shebang. Et skript kan angi #!/bin/bash på første linje, noe som betyr at skriptet alltid skal kjøres med bash, i stedet for et annet skall.

/bin / sh er en kjørbar som representerer systemskallet. Faktisk er det vanligvis implementert som en symbolsk lenke som peker på kjørbar for hvilket skall som er systemskallet. Systemskallet er slags standardskall som systemskript skal bruke. I Linux-distribusjoner var dette i lang tid vanligvis en symbolsk lenke til bash, så mye at det har blitt noe av en konvensjon å alltid koble/bin / sh til bash eller et bash-kompatibelt skall. Men I De siste par årene Besluttet Debian (Og Ubuntu) å bytte systemskallet fra bash til dash – et lignende skall som bryter med en lang tradisjon I Linux (VEL, GNU) for å bruke bash for /bin/sh. Dash er sett på som et lettere og mye raskere skall som kan være gunstig for oppstartshastighet(og andre ting som krever mange skallskript, som pakkeinstallasjonsskript).

Dash er ganske godt kompatibel med bash, basert på samme POSIX-standard. Det implementerer imidlertid ikke bash-spesifikke utvidelser. Det finnes skript som bruker #!/bin/sh (systemskallet) som deres shebang, men som krever bash-spesifikke utvidelser. Dette anses for tiden som En feil som Skal løses Av Debian og Ubuntu, som krever /bin/sh for å kunne jobbe når de peker på dash.

Selv Om Ubuntus systemskall peker på dash, fortsetter innloggingsskallet som bruker å være bash på dette tidspunktet. Det vil si at når du logger på en terminalemulator hvor som helst i Linux, vil innloggingsskallet ditt være bash. Operasjonshastighet er ikke så mye et problem når skallet brukes interaktivt, og brukerne er kjent med bash(og kan ha bash-spesifikke tilpasninger i hjemmekatalogen).

Hva du bør bruke når du skriver skript

hvis skriptet krever funksjoner som bare støttes av bash, bruk #!/bin/bash.

Men Hvis det er mulig, ville det være bra å sørge for at skriptet DITT ER POSIX-kompatibelt, og bruk #!/bin/sh, som alltid, ganske pålitelig, peker på det foretrukne POSIX-kompatible systemskallet i enhver installasjon.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.