30Jul

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

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

Întrebarea de astăzi &Sesiunea de răspuns vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.

Întrebarea

SuperUser cititor Hendre vrea să știe când este mai bine să utilizezi #!/bin/ bash în loc de #!/bin/ sh în scripturile shell:

Când este mai adecvat să folosiți #!/bin/ bash mai degrabă decât #!/bin/ sh într-un script shell?

Când este mai bine să folosiți #!/bin/ bash în loc de #!/bin/ sh într-un script shell?

Raspunsul Raspunsului

SuperUser contributor are raspunsul pentru noi:

Pe scurt:

  • Exista cateva shell-uri care implementeaza un superset al caietului de sarcini POSIX sh. Pe sisteme diferite, /bin/ sh ar putea fi o legătură la cenușă, bash, dash, ksh, zsh etc. Totuși, va fi întotdeauna compatibil cu sh, deși niciodată csh sau pește.
  • Atâta timp cât rămâneți la funcțiile sh, puteți( și probabil chiar ar trebui) să utilizați #!/bin/ sh și script-ul ar trebui să funcționeze bine, indiferent de coajă este.
  • Dacă începeți să utilizați funcții specifice bash( adică arraje), ar trebui să solicitați în mod special bash deoarece, chiar dacă /bin/ sh invoca deja bash pe sistemul dvs., este posibil ca acesta să nu se afle în sistemul tuturor celorlalți, iar scriptul dvs. nu va fi rulat acolo. Același lucru este valabil și pentru zsh și ksh, desigur.
  • Chiar dacă scriptul este numai pentru uz personal, s-ar putea să observați că unele sisteme de operare modifică /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 bashism, dar au avut #!/bin/ sh a izbucnit brusc.

Cu toate acestea:

  • Chiar și #!/bin/ bash /bin/ nu este corect. Pe sisteme diferite, bash poate trăi în /usr/ bin , /usr/pkg/ bin sau bin /usr/local/ .
  • 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 .

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

: Wikipedia