Это - лучшая практика для записи сценариев Bash или сценариев Bourne? Моя команда пишет сценарии Bourne, но я не совсем уверен почему.
Если это - вопрос о священной войне (т.е.: энергия по сравнению с emacs), просто ответьте: священная война.
Это зависит от вашей целевой платформы.
Если вы ориентируетесь, скажем, только на основные дистрибутивы Linux и Mac OS X, то можете быть уверены, что в этих системах будет доступен bash. В других UNIX (например, AIX, Solaris, HP-UX) bash может не обязательно присутствовать, поэтому Bourne - более безопасный выбор. Если доступен bash, я не могу придумать причины, по которым вы могли бы предпочесть Bourne.
Ну, это дело вкуса, но для начала , сценарии оболочки bourne можно запускать с помощью bash, и я думаю, что в bash есть функции, которые не могут выполняться с помощью Bourne.
Переносимость. Я пишу #! / Bin / sh
, если что-то не становится слишком болезненным, а затем пишу #! / Bin / bash
. Мир меняется очень быстро, и я уверен, что в будущем будет легко убедить системных администраторов установить bash. Но я хеджирую свои ставки, используя Борна для большинства вещей, что очень просто.
Самое важное - помнить, что не каждая ОС связывает / bin / sh с / bin / bash, как некоторые Linux дистрибутивы делают. Для bash написано много скриптов, но они начинаются с:
#!/bin/sh
, поэтому они ломаются, например. в Ubuntu. Итак, когда вы пишете сценарий bash, всегда пишите:
#!/bin/bash
Вы можете быть более уверены в том, что оболочка Bourne будет установлена на любом компьютере Unix. Да, Bash повсеместно присутствует в Linux, но Linux - это не весь мир.
Я бы снова выбрал оболочку bourne, поскольку оболочка bourne может немного отличаться в разных реализациях Unix. С помощью bash
вы можете быть уверены, что bash
всегда будет bash
.
В Mac OS X / bin / sh НЕ является оболочкой Борна. (Но вы можете получить настоящую бурнешу из свежего мяса).
Чтобы идентифицировать традиционную оболочку Борна, вы можете попробовать использовать циркумфлекс ^ (каретка) вместо | (трубка).
См .:
Традиционное семейство раковин Борна,