Wann ist es besser, #! / Bin / bash anstelle von #! / Bin / sh in einem Shell-Skript zu verwenden?

Inhaltsverzeichnis:

Wann ist es besser, #! / Bin / bash anstelle von #! / Bin / sh in einem Shell-Skript zu verwenden? - Blog 2023
Wann ist es besser, #! / Bin / bash anstelle von #! / Bin / sh in einem Shell-Skript zu verwenden? - Blog 2023
Anonim
Wenn Sie ein neues Shell-Skript erstellen, möchten Sie sicherstellen, dass es so problemlos wie möglich ist. Manchmal kann es jedoch etwas verwirrend sein, zu wissen, welches Shebang das Beste ist, das Sie verwenden können. In diesem Zusammenhang hat der heutige SuperUser-Beitrag zu Antworten auf verwirrte Leser die Antwort.
Wenn Sie ein neues Shell-Skript erstellen, möchten Sie sicherstellen, dass es so problemlos wie möglich ist. Manchmal kann es jedoch etwas verwirrend sein, zu wissen, welches Shebang das Beste ist, das Sie verwenden können. In diesem Zusammenhang hat der heutige SuperUser-Beitrag zu Antworten auf verwirrte Leser die Antwort.

Die heutige Question & Answer-Sitzung wird von SuperUser zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-basierten Gruppierung von Q & A-Websites.

Die Frage

Super-User-Leser Hendre möchte wissen, wann es besser ist #! / bin / bash anstatt #! / bin / sh in Shell-Skripten:

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

Wann ist es besser zu benutzen #! / bin / bash anstatt #! / bin / sh in einem Shell-Skript?

Die Antwort

SuperUser-Mitwirkender grawity hat die Antwort für uns:

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.

Haben Sie etwas zur Erklärung hinzuzufügen? Ton aus in den Kommentaren. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Hier geht es zum vollständigen Diskussionsthread.

Bildnachweis: Wikipedia

Beliebtes Thema

Fachberatung