Когда лучше использовать #! / Bin / bash Вместо #! / Bin / sh в сценарии оболочки?

Оглавление:

Когда лучше использовать #! / Bin / bash Вместо #! / Bin / sh в сценарии оболочки?
Когда лучше использовать #! / Bin / bash Вместо #! / Bin / sh в сценарии оболочки?

Видео: Когда лучше использовать #! / Bin / bash Вместо #! / Bin / sh в сценарии оболочки?

Видео: Когда лучше использовать #! / Bin / bash Вместо #! / Bin / sh в сценарии оболочки?
Видео: Команды в cmd для новичков - YouTube 2024, Май
Anonim
Когда вы создаете новый скрипт оболочки, вы хотите убедиться, что он как можно более бесплатный, но иногда может быть немного запутанным знать, какой из лучших для вас. В этой заметке сегодняшнее сообщение о суперпользователе SuperUser ответит на вопрос путаного читателя.
Когда вы создаете новый скрипт оболочки, вы хотите убедиться, что он как можно более бесплатный, но иногда может быть немного запутанным знать, какой из лучших для вас. В этой заметке сегодняшнее сообщение о суперпользователе SuperUser ответит на вопрос путаного читателя.

Сегодняшняя сессия вопросов и ответов приходит к нам благодаря SuperUser - подразделению Stack Exchange, основанной на сообществах сайтам Q & A.

Вопрос

Читатель SuperUser Хендре хочет знать, когда лучше использовать #! / Bin / Баш вместо #! / Bin / ш в сценариях оболочки:

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

Когда лучше использовать #! / Bin / Баш вместо #! / Bin / ш в сценарии оболочки?

Ответ

Ответственность за использование SuperUser отвечает за нас:

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.

Есть что добавить к объяснению? Отключить звук в комментариях. Хотите узнать больше ответов от других пользователей Windows? Посмотрите здесь полную дискуссионную тему.

Изображение: Википедия

Рекомендуемые: