Pagina principala » HOWTO » Când este mai bine să utilizați #! / Bin / bash În loc de #! / Bin / sh într-un Shell Script?

    Când este mai bine să utilizați #! / Bin / bash În loc de #! / Bin / sh într-un Shell Script?

    Când creați un nou script de shell, doriți să vă asigurați că este la fel de lipsit de probleme, dar uneori poate fi puțin confuz să știți care este cel mai bun shebang pentru tine de folosit. Pe această notă, postul de astăzi SuperUser Q & A are răspunsul la o întrebare confuză a cititorului.

    Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.

    Intrebarea

    Cititorul super-utilizator Hendre dorește să știe când este mai bine să o utilizați #! / Bin / bash in loc de #! / Bin / sh în scripturile shell:

    Când este mai adecvat să se folosească #! / Bin / bash Decat #! / Bin / sh într-un script shell?

    Când este mai bine să o utilizați #! / Bin / bash in loc de #! / Bin / sh într-un script shell?

    Răspunsul

    Contribuția superutilizatorului Grawity are răspunsul pentru noi:

    Pe scurt:

    • Există mai multe cochilii care implementează o superset de specificație POSIX sh. Pe sisteme diferite, / Bin / sh ar putea fi o legătură la cenușă, bash, liniuță, ksh, zsh, etc. Totuși va fi întotdeauna compatibil cu sh-ul, niciodată csh sau pește.
    • Atâta timp cât rămâi doar la caracteristicile sh, poți (și probabil chiar ar trebui) să le folosești #! / Bin / sh iar scenariul ar trebui să funcționeze bine, indiferent de coajă.
    • Dacă începeți să utilizați funcții specifice bash (adică tablouri), ar trebui să solicitați în mod special bash deoarece, chiar dacă / Bin / sh deja se invocă bash pe sistemul dvs., s-ar putea să nu în sistemul tuturor celorlalți și script-ul dvs. nu va rula acolo. Același lucru este valabil și pentru zsh și ksh, desigur.
    • Chiar dacă scriptul este numai pentru uz personal, este posibil să observați schimbarea anumitor sisteme de operare / Bin / sh în timpul actualizărilor. De exemplu, pe Debian a fost bash, dar ulterior a fost înlocuit cu linia foarte minimă. Scripturi care au folosit bashisme, dar au avut #! / Bin / sh brusc sa rupt.

    In orice caz:

    • Chiar #! / Bin / bash nu este corect. Pe sisteme diferite, bash ar putea trăi / Usr / bin, / Usr / PKG / bin, sau / / Local / bin usr.
    • O opțiune mai fiabilă este #! / usr / bin / env bash, care utilizează $ PATH. Deși instrumentul env în sine nu este strict garantat, / Usr / bin / env încă funcționează pe mai multe sisteme decât / Bin / bash face.

    Aveți ceva de adăugat la explicație? Sunați în comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.

    Credit de imagine: Wikipedia