У меня есть кросс-платформенный продукт, который развертывается на нескольких дистрибутивах Linux, и я занят изменением одного из его сценариев запуска. В настоящее время сценарий использует/bin/sh как интерпретатор. Мой вопрос. Насколько я уверен, если я изменю это на/bin/bash, будут ли случаи, когда bash не установлен или что-то еще. Почему все скрипты в /etc/init.d используют/bin/sh. Есть ли какие-то вещи, которые будут ломаться при использовании bash?Можно ли установить bash
ответ
Могу ли я считать, Баш установлен
Если портативность цель, вы будете делать себе медвежью услугу чтобы принять bash
. Это не означает, что bash
не будет установлен в 99% случаев, но это 1%, который получает ya.
Насколько безопасно это я, если я изменю это/бен/Баш, будут ли какие-то случаи, Баш не установлен или что-то
bash
является POSIX Compliant оболочки, поэтому, если вам нужно/хочу для использования синтаксиса только для bash, я бы не просто изменил строку интерпретатора на #!/bin/bash
по прихоти; он не покупает вам ничего со скриптом, который работает с #!/bin/sh
Почему все сценарии в использования /etc/init.d/бен/ш
Потому что они не хотят, чтобы система идти вниз, если администратор решает, что он хочет, чтобы сэкономить место на жестком диске, удалив bash
, потому что его любимая оболочка zsh
есть некоторые вещи, которые будут нарушать при использовании баш?
Это наоборот.Если у вас есть скрипт с Баш-только (не POSIX) синтаксис, например [[ ]]
или процесса замещения <()
, это нарушит, если изменить интерпретатор #!/bin/bash
к #!/bin/sh
Это зависит от того, как вы используете «кросс-платформу».
В случае, если он запускается на «основных» дистрибутивах Linux, не стесняйтесь принимать bash, но в случае небольших кулаков или настраиваемых установок bash не является данным. Действительно, если вы уйдете от Linux, я буду еще более осторожен в принятии bash (и, в этом отношении, местоположение/bin/bash не задано).
Причина, по которой сценарии /etc/init.d всегда используют/bin/sh, потому что она задана на большинстве платформ.
Я не думаю, что материал сломается, если вы используете bash, bash реализует те же «функции», что и sh, но не наоборот. Короче говоря, если вам не нужно Баш специфические особенности, а затем использовать/bin/ш
Предположить, что Баш установлен падает в то же категории в
- Весь мир в VAX
- Все процессоры i386
- Все свободное Unixen являются Linux
- Все Иды являются Затмения
- Всех компиляторов GCC
Если вы держите портативность (по крайней мере, в POSIX оболочку) в виде, вы будут сэкономить много работы на будущее. Придет день, когда вы окажетесь в другой компании, с другой ОС и другой оболочкой. Тогда ваши знания о переносимости оболочки будут платить большие дивиденды.
Мантра, чтобы рассказать себе и другим, такова: «Успение - мать всех отвратительных». :-)
- 1. Можно ли установить Ruby ENV с bash в Chef?
- 2. Bash: Можно ли установить псевдоним с помощью шаблона
- 3. Как можно установить os.popen для использования Bash?
- 4. Можно ли установить фиксированный рейтингбар?
- 5. Можно ли установить локально локально?
- 6. Можно ли условно установить заголовки?
- 7. JLabel - можно ли установить RenderingHints.VALUE_TEXT_ANTIALIAS_OFF?
- 8. Можно ли программно установить drawableLeft?
- 9. Можно ли установить дистрибутивы источника?
- 10. Можно ли установить текущий каталог?
- 11. Можно ли искать все истории bash
- 12. Можно ли отключить Command Substitution в Bash?
- 13. Можно ли оптимизировать эту функцию bash?
- 14. Можно ли использовать $ array =() в bash?
- 15. Можно ли отлаживать скрипты bash по очереди?
- 16. Можно ли ожидать появления функции bash?
- 17. Может ли «крышка развернуть: установить» уничтожить BASH?
- 18. Можно ли установить spring.datasource.driver-class-name через переменные среды?
- 19. Можно ли использовать строчный режим bash в make-файле?
- 20. Возможно ли установить тайм-аут из сценария bash?
- 21. TortoiseGit - Можно ли установить цвет в ветку?
- 22. Можно ли установить LinqDataSource.OrderBy в результат метода?
- 23. Можно ли установить cookie при использовании jsonify?
- 24. Можно ли установить * ngIf на элемент хоста?
- 25. Можно ли установить таймаут для std :: cin?
- 26. Можно ли установить Pinax на gae?
- 27. Можно ли программно установить первые 7 бит $?
- 28. Динамические отчеты - можно ли установить стартовую страницу?
- 29. Можно ли установить рамки Laravel внутри Yii?
- 30. Можно ли установить scipy под pypy?
Кроме того, сценарии запуска используют 'sh', потому что он быстрее, чем Bash. –
В системах, где/bin/sh является ссылкой на/bin/bash, хотя использование/bin/sh запускает bash в режиме sh 'compatible', оно не полностью совместимо. По-прежнему можно использовать синтаксис, специфичный для bash, и работать с/bin/sh, связанным с bash, но не работать при использовании более строго совместимой оболочки, например, тире. – Arrowmaster
@Arrowmaster Не могли бы вы предоставить конкретные примеры синтаксиса, отличного от POSIX, который bash будет выполняться при запуске как '/ bin/sh'. Вызывает ли это обращение к оболочке как '#!/Bin/sh -posix'? – SiegeX