Når er det bedre å bruke #! / Bin / bash I stedet for #! / Bin / sh i et Shell Script?

Innholdsfortegnelse:

Når er det bedre å bruke #! / Bin / bash I stedet for #! / Bin / sh i et Shell Script?
Når er det bedre å bruke #! / Bin / bash I stedet for #! / Bin / sh i et Shell Script?

Video: Når er det bedre å bruke #! / Bin / bash I stedet for #! / Bin / sh i et Shell Script?

Video: Når er det bedre å bruke #! / Bin / bash I stedet for #! / Bin / sh i et Shell Script?
Video: The Windows 10 Run Command You Forgot - YouTube 2024, Kan
Anonim
Når du oppretter et nytt skallskript, vil du sørge for at det er så problemfritt som mulig, men noen ganger kan det være litt forvirrende å vite hvilken shebang er den beste for deg å bruke. På det notatet har dagens SuperUser Q & A-post svaret på en forvirret leser spørsmål.
Når du oppretter et nytt skallskript, vil du sørge for at det er så problemfritt som mulig, men noen ganger kan det være litt forvirrende å vite hvilken shebang er den beste for deg å bruke. På det notatet har dagens SuperUser Q & A-post svaret på en forvirret leser spørsmål.

Dagens Spørsmål & Svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en fellesskapsdrevet gruppering av Q & A-nettsteder.

Spørsmålet

SuperUser leser Hendre vil vite når det er bedre å bruke #! / Bin / bash i stedet for #! / Bin / sh i shell-skript:

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

Når er det bedre å bruke #! / Bin / bash i stedet for #! / Bin / sh i et shell script?

Svaret

SuperUser bidragsyter gravitasjon har svaret for oss:

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.

Har du noe å legge til forklaringen? Lyder av i kommentarene. Vil du lese flere svar fra andre tech-savvy Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her.

Bildekreditt: Wikipedia

Anbefalt: