care este diferența dintre #!/ bin / sh și #!/ bin / bash?

pe Linux și alte sisteme asemănătoare Unix aveți posibilitatea de a alege mai multe shell-uri.

shell-ul este responsabil nu numai pentru desen mic prompt, dar interpretarea comenzilor, mai ales dacă ai pus în logica complicate cum ar fi conducte, condiționale și așa mai departe.

bash este cel mai comun shell folosit ca shell implicit pentru utilizatorii sistemelor Linux. Este un descendent spiritual al altor cochilii folosite de-a lungul istoriei Unix. Numele său, bash este o abreviere a Bourne-Again Shell, un omagiu adus shell-ului Bourne pe care a fost conceput să îl înlocuiască, deși încorporează și caracteristici din Shell-ul C și Shell-ul Korn.

este rulat, în aceste zile, de la /bin/bash – orice sistem cu bash îl va avea accesibil aici.

nu doar utilizatorii folosesc shell-uri. Scripturile (scripturile shell) au nevoie de shell-uri pentru a le interpreta. Când executați un script shell, sistemul dvs. trebuie să pornească un proces shell pentru a executa scriptul.

problema este că diferite cochilii au mici inconsecvențe între ele, iar când vine vorba de rularea scripturilor, acestea pot fi o problemă reală. bash are destul de multe caracteristici de scripting care sunt unice doar pentru bash și nu pentru alte cochilii. Acest lucru este bine, dacă sunteți întotdeauna de gând să utilizați bash pentru a rula aceste script-uri. Alte cochilii pot încerca fie să imite bash, fie să adere la standardul POSIX, pe care bash îl acceptă destul de bine (deși își adaugă propriile extensii).

este posibil să specificați în partea de sus a unui script shell cu care shell ar trebui să fie rulat folosind un shebang. Un script poate specifica #!/bin/bash pe prima linie, ceea ce înseamnă că scriptul ar trebui să fie întotdeauna rulat cu bash, mai degrabă decât cu un alt shell.

/bin/sh este un executabil care reprezintă shell-ul sistemului. De fapt, este de obicei implementat ca o legătură simbolică care indică executabilul pentru oricare shell este shell-ul sistemului. Shell-ul de sistem este un fel de shell implicit pe care scripturile de sistem ar trebui să le utilizeze. În distribuțiile Linux, pentru o lungă perioadă de timp aceasta a fost de obicei o legătură simbolică cu bash, atât de mult încât a devenit oarecum o convenție de a lega întotdeauna /bin/sh la bash sau un shell compatibil bash. Cu toate acestea, în ultimii ani Debian (și Ubuntu) au decis să schimbe shell – ul de sistem de la bash la dash – o rupere similară a shell-ului cu o lungă tradiție în Linux (bine, GNU) de a folosi bash pentru /bin/sh. Dash este văzut ca un shell mai ușor și mult mai rapid, care poate fi benefic pentru viteza de pornire (și alte lucruri care necesită o mulțime de scripturi shell, cum ar fi scripturile de instalare a pachetelor).

Dash este destul de bine compatibil cu bash, fiind bazat pe același standard POSIX. Cu toate acestea, nu implementează extensiile specifice bash. Există scripturi existente care utilizează #!/bin/sh (shell-ul sistemului) ca shebang, dar care necesită extensii specifice bash. În prezent, aceasta este considerată o eroare care ar trebui remediată de Debian și Ubuntu, care necesită /bin/sh pentru a putea funcționa atunci când este indicat dash.

chiar dacă shell-ul sistemului Ubuntu indică dash, shell-ul dvs. de conectare ca utilizator continuă să fie bash în acest moment. Adică, atunci când vă conectați la un emulator terminal oriunde în Linux, shell-ul dvs. de conectare va fi bash. Viteza de operare nu este atât de mult o problemă atunci când shell-ul este utilizat interactiv, iar utilizatorii sunt familiarizați cu bash (și pot avea personalizări specifice bash în directorul lor de origine).

ce ar trebui să utilizați atunci când scrieți scripturi

dacă scriptul dvs. necesită caracteristici acceptate numai de bash, utilizați #!/bin/bash.

dar dacă este posibil, ar fi bine să vă asigurați că scriptul dvs. este compatibil cu POSIX și să utilizați #!/bin/sh, care ar trebui să indice întotdeauna, destul de fiabil, shell-ul de sistem compatibil POSIX preferat în orice instalare.

Lasă un răspuns

Adresa ta de email nu va fi publicată.