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

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

    Когда вы создаете новый сценарий оболочки, вы хотите убедиться, что он настолько беспроблемен, насколько это возможно, но иногда может быть немного непонятно, какой шебанг вам лучше всего использовать. На этом примечании, сегодняшняя запись SuperUser Q & A содержит ответ на запутанный вопрос читателя.

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

    Вопрос

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

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

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

    Ответ

    SuperUser вкладчик благодарность имеет ответ для нас:

    Короче:

    • Существует несколько оболочек, которые реализуют расширенный набор спецификации POSIX sh. На разных системах, / Бен / ш может быть ссылкой на ash, bash, dash, ksh, zsh и т. д. Он всегда будет совместимым с sh, но никогда не будет csh или fish.
    • Пока вы придерживаетесь только функций sh, вы можете (и, вероятно, даже должны) использовать #! / Bin / ш и скрипт должен работать нормально, независимо от того, какая это оболочка.
    • Если вы начинаете использовать специфичные для bash функции (то есть массивы), вам следует специально запросить bash, потому что даже если / Бен / ш уже вызывает bash в вашей системе, он может не работать в других системах, и ваш скрипт не будет работать там. То же самое относится и к zsh и ksh, конечно.
    • Даже если скрипт предназначен только для личного использования, вы можете заметить, что некоторые операционные системы меняются / Бен / ш во время обновлений. Например, в Debian это был bash, но позже его заменили на минимальный тире. Скрипты, которые использовали bashisms, но имели #! / Bin / ш внезапно сломался.

    Тем не мение:

    • Четное #! / Bin / Баш это не так правильно. В разных системах Bash может жить в / USR / бен, / USR / упак / бен, или же / USR / местные / бен.
    • Более надежный вариант #! / usr / bin / env bash, который использует $ PATH. Хотя сам инструмент env строго не гарантирован, / USR / бен / окр по-прежнему работает на большем количестве систем, чем / Бен / Баш делает.

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

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