Quando è meglio usare #! / Bin / bash Invece di #! / Bin / sh in uno script di shell?

Sommario:

Quando è meglio usare #! / Bin / bash Invece di #! / Bin / sh in uno script di shell?
Quando è meglio usare #! / Bin / bash Invece di #! / Bin / sh in uno script di shell?

Video: Quando è meglio usare #! / Bin / bash Invece di #! / Bin / sh in uno script di shell?

Video: Quando è meglio usare #! / Bin / bash Invece di #! / Bin / sh in uno script di shell?
Video: I COMANDI PRINCIPALI DEL CMD - PROMPT DEI COMANDI - TUTORIAL - YouTube 2024, Aprile
Anonim
Quando si sta creando un nuovo script di shell, si desidera assicurarsi che sia il più privo di problemi possibile, ma a volte può essere un po 'di confusione sapere quale shebang è il migliore da usare. In questa nota, il post di Q & A di SuperUser di oggi ha la risposta alla domanda di un lettore confuso.
Quando si sta creando un nuovo script di shell, si desidera assicurarsi che sia il più privo di problemi possibile, ma a volte può essere un po 'di confusione sapere quale shebang è il migliore da usare. In questa nota, il post di Q & A di SuperUser di oggi ha la risposta alla domanda di un lettore confuso.

La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di domande e risposte basato sulla comunità.

La domanda

Il lettore SuperUser Hendre vuole sapere quando è meglio usarlo #! / Bin / bash invece di #! / Bin / sh negli script di shell:

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

Quando è meglio usare #! / Bin / bash invece di #! / Bin / sh in uno script di shell?

La risposta

Il contributo di SuperUser grawity ha la risposta per noi:

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.

Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla la discussione completa qui.

Credito d'immagine: Wikipedia

Consigliato: