Домашня » як » Коли краще використовувати #! / Bin / bash Замість #! / Bin / sh у сценарії Shell?

    Коли краще використовувати #! / Bin / bash Замість #! / Bin / sh у сценарії Shell?

    Коли ви створюєте новий сценарій оболонки, ви хочете переконатися, що він є настільки проблематичним, наскільки це можливо, але іноді це може бути трохи заплутаним, щоб дізнатися, який shebang є найкращим для вас. На цій ноті, сьогоднішній пост із запитаннями та відповідями SuperUser має відповідь на плутане запитання читача.

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

    Питання

    Читач SuperUser Hendre хоче знати, коли це краще використовувати #! / bin / bash замість #! / bin / sh у скриптах оболонки:

    Коли це більш доцільно використовувати #! / bin / bash а не #! / bin / sh у сценарії оболонки?

    Коли це краще використовувати #! / bin / bash замість #! / bin / sh у сценарії оболонки?

    Відповідь

    Гравітет учасника SuperUser має відповідь для нас:

    Коротко:

    • Існує декілька оболонок, які реалізують суперсеть специфікації POSIX sh. На різних системах, / bin / sh може бути посиланням на ash, bash, тире, ksh, zsh тощо..
    • До тих пір, поки ви дотримуєтеся лише функцій sh, ви можете (і, можливо, навіть повинні) використовувати #! / bin / sh і сценарій повинен працювати нормально, незалежно від того, яка оболонка.
    • Якщо ви почнете використовувати специфічні для bash функції (тобто масиви), вам слід спеціально запитувати bash, навіть якщо / bin / sh вже викликає bash у вашій системі, він може не на всіх інших системах, і ваш сценарій не буде працювати там. Те ж саме стосується і zsh і ksh, звичайно.
    • Навіть якщо сценарій призначений лише для особистого користування, можна помітити, що деякі операційні системи змінюються / bin / sh під час оновлення. Наприклад, на Debian це було bash, але пізніше було замінено на мінімальний тире. Сценарії, які використовували башисти, але мали #! / bin / sh раптом зламався.

    Однак:

    • Навіть #! / bin / bash це не так правильно. На різних системах bash може жити / usr / bin, / usr / pkg / bin, або / usr / local / bin.
    • Більш надійним є варіант #! / usr / bin / env bash, який використовує $ PATH. Хоча і сам інструмент env не гарантовано суворо, / usr / bin / env все ще працює на більшій кількості систем, ніж / bin / bash робить.

    Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.

    Кредит на зображення: Вікіпедія