Kedy je lepšie používať #! / Bin / bash Namiesto #! / Bin / sh v Shell Script?

Obsah:

Kedy je lepšie používať #! / Bin / bash Namiesto #! / Bin / sh v Shell Script?
Kedy je lepšie používať #! / Bin / bash Namiesto #! / Bin / sh v Shell Script?

Video: Kedy je lepšie používať #! / Bin / bash Namiesto #! / Bin / sh v Shell Script?

Video: Kedy je lepšie používať #! / Bin / bash Namiesto #! / Bin / sh v Shell Script?
Video: 40 Windows Commands you NEED to know (in 10 Minutes) - YouTube 2024, Apríl
Anonim
Pri vytváraní nového shell skriptu sa chcete ubezpečiť, že je to ako problém bez problémov, ale niekedy to môže byť trochu mätúce, aby ste vedeli, ktorý shebang je ten najlepší na používanie. V tejto poznámke je dnešný príspevok SuperUser Q & A odpoveďou na zmätočnú otázku čitateľa.
Pri vytváraní nového shell skriptu sa chcete ubezpečiť, že je to ako problém bez problémov, ale niekedy to môže byť trochu mätúce, aby ste vedeli, ktorý shebang je ten najlepší na používanie. V tejto poznámke je dnešný príspevok SuperUser Q & A odpoveďou na zmätočnú otázku čitateľa.

Dnešná relácia otázok a odpovedí sa k nám pridelí zdvorilosťou SuperUser - podskupiny Stack Exchange, skupín webových stránok týkajúcich sa otázok a odpovedí.

Otázka

Čítačka SuperUser Hendre chce vedieť, kedy je lepšie používať #! / Bin / bash namiesto #! / Bin / sh v shell skriptoch:

When is it more appropriate to use #!/bin/bash rather than #!/bin/sh in a shell script?

Kedy je lepšie používať #! / Bin / bash namiesto #! / Bin / sh v shellovom skripte?

Odpoveď

Pripomienka SuperUser prispievateľ má odpoveď pre nás:

In short:

  • There are several shells which implement a superset of the POSIX sh specification. On different systems, /bin/sh might be a link to ash, bash, dash, ksh, zsh, etc. It will always be sh-compatible though, never csh or fish.
  • As long as you stick to sh features only, you can (and probably even should) use #!/bin/sh and the script should work fine, no matter which shell it is.
  • If you start using bash-specific features (i.e. arrays), you should specifically request bash because, even if /bin/sh already invokes bash on your system, it might not on everyone else’s system, and your script will not run there. The same applies to zsh and ksh, of course.
  • Even if the script is for personal use only, you might notice that some operating systems change /bin/sh during upgrades. For example, on Debian it used to be bash, but was later replaced with the very minimal dash. Scripts which used bashisms but had #!/bin/sh suddenly broke.

However:

  • Even #!/bin/bash is not that correct. On different systems, bash might live in /usr/bin, /usr/pkg/bin, or /usr/local/bin.
  • A more reliable option is #!/usr/bin/env bash, which uses $PATH. Although the env tool itself is not strictly guaranteed either, /usr/bin/env still works on more systems than /bin/bash does.

Máte niečo doplniť vysvetlenie? Znížte komentáre. Chcete si prečítať viac odpovedí od iných používateľov technológie Stack Exchange? Pozrite sa na celý diskusný príspevok tu.

Image Credit: Wikipedia

Odporúča: