hvad er forskellen mellem #!/ bin / sh og #!/ bin / bash?

og andre unikke systemer kan du vælge mellem flere skaller.

skallen er ikke kun ansvarlig for at tegne din lille prompt, men fortolke dine kommandoer, især hvis du lægger i kompliceret logik som rør, betingelser og så videre.

bash er den mest almindelige skal, der bruges som standardskal til brugere af Liniesystemer. Det er en åndelig efterkommer af andre skaller, der bruges gennem hele historien. Dets navn, bash er en forkortelse af Bourne-Again Shell, en hyldest til Bourne shell Det var designet til at erstatte, selvom det også indeholder funktioner fra C Shell og Korn Shell.

det køres i disse dage fra /bin/bash – ethvert system med bash vil have det tilgængeligt her.

det er dog ikke kun brugere, der bruger skaller. Scripts (shell scripts) har brug for skaller for at fortolke dem. Når du kører et shell-script, skal dit system starte en shell-proces for at udføre dit script.

problemet er, at forskellige skaller har små små uoverensstemmelser mellem dem, og når det kommer til at køre scripts, kan disse være et reelt problem. bash har en hel del scripting funktioner, der er unikke kun til bash, og ikke til andre skaller. Dette er fint, hvis du altid vil bruge bash til at køre disse scripts. Andre skaller kan forsøge at enten efterligne bash eller overholde POSIKS-standarden, som bash understøtter ret godt (dog tilføjer sine egne udvidelser til).

det er muligt at angive øverst i et shell-script, hvilken skal det skal køres med ved hjælp af en shebang. Et script kan angive #!/bin/bash på den første linje, hvilket betyder, at scriptet altid skal køres med bash, snarere end en anden skal.

/bin/sh er en eksekverbar, der repræsenterer systemskallen. Faktisk implementeres det normalt som et symbolsk link, der peger på den eksekverbare, uanset hvilken skal der er systemskallen. Systemskallen er en slags standardskal, som systemskripter skal bruge. I lang tid var dette normalt et symbolsk link til bash, så meget, at det er blevet noget af en konvention om altid at linke /bin/sh til bash eller en bash-kompatibel skal. Men i de sidste par år besluttede Debian (og Ubuntu) at skifte systemskallen fra bash til dash – en lignende shell – breaking med en lang tradition for at bruge bash til /bin/sh. Dash ses som en lettere og meget hurtigere skal, som kan være gavnlig for opstartshastigheden (og andre ting, der kræver mange shell-scripts, som pakkeinstallationsskripter).

Dash er ret godt kompatibel med bash, der er baseret på den samme POSITIONSSTANDARD. Det implementerer dog ikke de bash-specifikke udvidelser. Der findes scripts, der bruger #!/bin/sh (systemskallen) som deres shebang, men som kræver bash-specifikke udvidelser. Dette betragtes i øjeblikket som en fejl, der skal rettes af Debian og Ubuntu, som kræver, at /bin/sh kan arbejde, når de peges på dash.

selvom Ubuntu ‘ s system shell peger på dash, fortsætter din login shell som bruger med at være bash på dette tidspunkt. Det vil sige, når du logger ind på en terminalemulator hvor som helst, vil din login-shell være bash. Hastighed af drift er ikke så meget et problem, når skallen bruges interaktivt, og brugerne er bekendt med bash (og kan have bash-specifikke tilpasninger i deres hjemmemappe).

hvad du skal bruge, når du skriver scripts

hvis dit script kræver funktioner, der kun understøttes af bash, skal du bruge #!/bin/bash.

men hvis det overhovedet er muligt, ville det være godt at sørge for, at dit script er Posis-kompatibelt, og brug #!/bin/sh, som altid, ganske pålideligt, skal pege på den foretrukne Posis-kompatible systemskal i enhver installation.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.