Millal on parem kasutada #! / Bin / bash Shell Scripti asemel #! / Bin / sh?

Sisukord:

Millal on parem kasutada #! / Bin / bash Shell Scripti asemel #! / Bin / sh?
Millal on parem kasutada #! / Bin / bash Shell Scripti asemel #! / Bin / sh?

Video: Millal on parem kasutada #! / Bin / bash Shell Scripti asemel #! / Bin / sh?

Video: Millal on parem kasutada #! / Bin / bash Shell Scripti asemel #! / Bin / sh?
Video: Marlin Firmware 2.0.x Explained - YouTube 2024, Aprill
Anonim
Kui loote uue shelliskripti, peate veenduma, et see on sama probleemivaba kui võimalik, kuid mõnikord võib see natuke segane teada saada, milline on teie jaoks kõige paremini sobivaim skript. Sellel teatel on tänase SuperUseri Q & A postitusel vastus segaduses oleva lugeja küsimusele.
Kui loote uue shelliskripti, peate veenduma, et see on sama probleemivaba kui võimalik, kuid mõnikord võib see natuke segane teada saada, milline on teie jaoks kõige paremini sobivaim skript. Sellel teatel on tänase SuperUseri Q & A postitusel vastus segaduses oleva lugeja küsimusele.

Tänane küsimuste ja vastuste seanss jõuab meile viisakalt SuperUserini - Stack Exchange'i ja kogukonnapõhiste Q & A veebisaitide rühmitusse.

Küsimus

SuperUseri lugeja Hendre soovib teada, millal seda paremini kasutada #! / bin / bash selle asemel #! / bin / sh shell skriptides:

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

Millal on parem kasutada #! / bin / bash selle asemel #! / bin / sh shell skripti?

Vastus

SuperUseri panustaja gravitatsioon vastab meile:

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.

Kas teil on seletamiseks midagi lisada? Helistage kommentaarides. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Tutvu täieliku arutelu teemaga siit.

Pilt krediit: Wikipedia

Soovitan: