Коли краще використовувати #! / 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? Перегляньте повний потік обговорення тут.
Кредит на зображення: Вікіпедія