2011-01-27 3 views
4

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

ответ

11

Могу ли я считать, Баш установлен

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

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

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

Почему все сценарии в использования /etc/init.d/бен/ш

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

есть некоторые вещи, которые будут нарушать при использовании баш?

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

+4

Кроме того, сценарии запуска используют 'sh', потому что он быстрее, чем Bash. –

+1

В системах, где/bin/sh является ссылкой на/bin/bash, хотя использование/bin/sh запускает bash в режиме sh 'compatible', оно не полностью совместимо. По-прежнему можно использовать синтаксис, специфичный для bash, и работать с/bin/sh, связанным с bash, но не работать при использовании более строго совместимой оболочки, например, тире. – Arrowmaster

+0

@Arrowmaster Не могли бы вы предоставить конкретные примеры синтаксиса, отличного от POSIX, который bash будет выполняться при запуске как '/ bin/sh'. Вызывает ли это обращение к оболочке как '#!/Bin/sh -posix'? – SiegeX

2

Это зависит от того, как вы используете «кросс-платформу».

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

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

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

+0

Да, это часто '/ usr/bin/bash' (если установлено вообще) на * BSD, которые, как правило, любят ksh больше. – ephemient

+0

В FreeBSD по крайней мере это '/ usr/local/bin/bash', если пакет или порт были установлены без дополнительных параметров. – Jens

0

Предположить, что Баш установлен падает в то же категории в

  • Весь мир в VAX
  • Все процессоры i386
  • Все свободное Unixen являются Linux
  • Все Иды являются Затмения
  • Всех компиляторов GCC

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

Мантра, чтобы рассказать себе и другим, такова: «Успение - мать всех отвратительных». :-)

Смежные вопросы