Могу ли я предположить, что установлен bash - PullRequest
6 голосов
/ 27 января 2011

У меня есть кроссплатформенный продукт, который развернут на нескольких дистрибутивах Linux, и я занят изменением одного из его скриптов запуска. В настоящее время скрипт использует / bin / sh в качестве интерпретатора. Мой вопрос Насколько я безопасен, если я изменю это на / bin / bash, будут ли случаи, когда bash не установлен или что-то в этом роде. Почему все скрипты в /etc/init.d используют / bin / sh. Есть ли что-то, что сломается при использовании bash?

Ответы [ 3 ]

13 голосов
/ 27 января 2011

Могу ли я предположить, что bash установлен

Если переносимость является целью, вы бы сами оказали медвежью услугу, предполагая, что bash был установлен.Это не означает, что bash не будет установлен в 99% случаев, но вы получаете 1%.

Насколько я безопасен, если я изменю это значение на / bin / bash, будут ли случаи, когда bash не установлен или что-то

bash является POSIX-совместимая оболочка, поэтому, если вы не хотите / не хотите использовать синтаксис bash-only, я бы не просто изменил строку интерпретатора на #!/bin/bash по прихоти;он ничего не покупает со скриптом, который работает с #!/bin/sh

Почему все скрипты в /etc/init.d используют / bin / sh

Потому что онине хотите, чтобы система вышла из строя, если администратор решит, что хочет сэкономить место на жестком диске, удалив bash, потому что его любимая оболочка - zsh

Есть ли какие-то вещи, которые сломаются, когдаиспользуя bash?

Это скорее наоборот.Если у вас есть сценарий с синтаксисом только для bash (не POSIX), например, [[ ]] или подстановка процесса <( ), он сломается, если вы измените интерпретатор с #!/bin/bash на #!/bin/sh

3 голосов
/ 27 января 2011

Это зависит от того, насколько «кроссовой» платформой является ваше приложение.

В случае, если оно работает на «основных» дистрибутивах Linux, не стесняйтесь использовать bash, но в случае небольших дисков или специальных установок bashне дано.В самом деле, если вы отойдете от Linux, я бы еще более осторожно относился к предположению bash (и в этом отношении местоположение / bin / bash также не является заданным).

Причина, по которой скрипты /etc/init.dвсегда используйте / bin / sh, потому что это данность на большинстве платформ.

Я не думаю, что вещи сломаются, если вы используете bash, bash реализует те же «особенности», что и sh, но не наоборотвокруг.Короче говоря, если вам не нужны специфические функции bash, используйте / bin / sh

1 голос
/ 30 августа 2011

Предположение, что bash установлен, относится к той же категории, что и

  • Весь мир VAX
  • Все процессоры i386
  • Все бесплатные Unixen - это Linux
  • Все IDE являются Eclipse
  • Все компиляторы gcc

Если вы помните о переносимости (по крайней мере, для оболочки POSIX), вы сэкономите себе много работы на будущее. Придет день, когда вы окажетесь в другой компании, с другой ОС и другой оболочкой. Тогда ваши знания о переносимости оболочки принесут большие дивиденды.

Мантра сказать себе и другим такова: «Предположение - мать всех ошибок». : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...