30Jul

Kdy je lepší použít #!/bin/ bash Namísto #!/bin/ sh v Shell Script?

Při vytváření nového shellu skriptu se chcete ujistit, že je to bez problémů, jak je to možné, ale někdy může být trochu matoucí, abyste věděli, který shebang je nejlepší pro použití.Na této poznámce má dnešní příspěvek SuperUser Q & A odpověď na otázku zmateného čtenáře.

dnešní otázka &Odpověď na zasedání nás obdrží s laskavým svolením SuperUser - subdivize Stack Exchange, komunitně řízeného seskupení webových stránek Q & A.

Otázka

SuperUser čtečka Hendre chce vědět, kdy je lepší použít #!/bin/ bash namísto #!/bin/ sh ve skriptech shellu:

Kdy je vhodnější použít #!/bin/ bash spíše než #!/bin/ sh v shell skriptu?

Kdy je lepší použít #!/bin/ bash namísto #!/bin/ sh v shell skriptu?

Odpověď odpověď

SuperUser přispěvatel následuje:

Stručně:

  • Existuje několik shellů, které implementují nadmnožinu specifikace POSIX sh. Na různých systémech může být /bin/ sh odkazem na popel, bash, pomlčku, ksh, zsh atd. Vždy bude sh-kompatibilní, nicméně, nikdy csh nebo ryby.
  • Pokud budete držet jen sh funkce, můžete( a pravděpodobně i byste měli) použít #!/bin/ sh a skript by měl fungovat dobře, bez ohledu na to, co je shell.
  • Pokud začnete používat funkce specifické pro bash( tj. Pole), měli byste specificky požádat o bash, protože i když /bin/ sh již vyvolává bash na vašem systému, nemusí to fungovat ve všech ostatních systémech a váš skript zde nebude fungovat. Totéž platí pro zsh a ksh, samozřejmě.
  • I když je skript určen pouze pro osobní použití, můžete si všimnout, že některé operační systémy během aktualizace upgradu změní /bin/ sh .Například na Debianu bývalo bash, ale později byl nahrazen velmi minimálním pomlckem. Skripty, které používaly bashismy, ale měly #!/bin/ sh náhle zlomil.

Avšak:

  • I #!/bin/ bash není tak správné.Na různých systémech může být bash v /usr/ přihrádce , /usr/pkg/ bin nebo /usr/local/ bin .
  • Spolehlivější je #!/usr/bin/ env bash , který používá $ PATH .Ačkoli samotný env nástroj není striktně zaručen, /usr/bin/ env stále funguje na více systémech než /bin/ bash .

Musíte něco přidat k vysvětlení?Zní to v komentářích. Chcete se dozvědět více odpovědí od ostatních uživatelů technologie Stack Exchange? Podívejte se na celý diskusní příspěvek zde. Obrázek

: Wikipedia