2010-04-27 5 views
9

Лучше ли писать сценарии Bash или сценарии Bourne? Моя команда пишет сценарии Bourne, но я не совсем понимаю, почему.Bash or Bourne Scripts?

Если это вопрос священной войны (то есть: vim vs. emacs), просто ответьте: священная война.

+5

только при условии, что это не csh – 2010-04-27 16:57:32

+1

[Csh Программирование считается вредным] (http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/) –

+0

Код REAL программистов в Корне! :-P Я всегда предпочитаю sh по сравнению с bash, потому что большинство синтаксических/особенных вещей будет одинаковым или, по крайней мере, совместимым с sh sh в большинстве дистрибутивов; тогда как bash просто недоступен в некоторых случаях, если вы работаете с AIX и т. д. Но если вы работаете с сценариями только для Linux, bash предпочтительнее. Делает для намного более легкого программирования imho. –

ответ

11

Это зависит от того, на что нацелена ваша целевая платформа.

Если вы используете только таргетинг, скажем, основные дистрибутивы Linux и Mac OS X, тогда вы можете быть уверены, что эти системы будут доступны. В других UNIX (например, AIX, Solaris, HP-UX) bash может не обязательно присутствовать, поэтому Bourne - более безопасный выбор. Если bash доступен, я могу думать, что нет причин, по которым вы можете предпочесть Bourne.

12

Вы можете быть уверены, что оболочка Bourne будет установлена ​​на любом компьютере Unix. Да, Bash вездесущ на Linux, но весь мир не Linux.

+0

В некотором роде, я могу думать только о трех причинах: обратная совместимость, переносимость или «так мы всегда это делали». –

+2

«Bash вездесущ на Linux, но весь мир не Linux». Это была моя вера раньше, затем я начал работать с Solaris и HP-UX машинами. Я думал, что могу писать сценарии оболочки в Bash для этих машин, о как я ошибался. Но это был хороший скромный опыт обучения, теперь я всегда использую оболочку bourne и только синтаксис, который, как я знаю, совместим с POSIX. – Anders

4

Ну, это вопрос вкуса, но для начала сценарии оболочки bourne можно запускать с помощью bash, и я думаю, что у bash есть функции, которые не может быть запущен Bourne.

10

Главное, чтобы помнить, что не все программные ссылки OS/bin/sh в/bin/bash, как это делают некоторые дистрибутивы Linux. Многие сценарии написаны для bash, но начинаются с:

#!/bin/sh 

так, чтобы они ломались, например. в Ubuntu. Итак, когда вы пишете Баш скрипт, всегда пишут:

#!/bin/bash 
+6

Один из моих орков коров был сумасшедшим в Ubuntu, потому что они использовали что-то другое, кроме bash для/bin/sh. Я сказал ему, что он должен злиться на идиотов, которые неправильно маркировали свои сценарии bash как скрипты sh, но он не согласился бы со мной. –

+1

Нет, вы всегда должны писать '#!/Usr/bin/env bash'. Bash может быть установлен в/bin/bash на вашем компьютере, но это нестандартизировано и не универсально. Однако, если вы придерживаетесь '#!/Bin/sh', вы, вероятно, будете в порядке. –

0

Я бы для Bourne Again Shell, как Борн оболочка может незначительно отличаться среди реализаций UNIX. С bash вы можете быть уверены, что bash всегда bash.

+0

Я бы не сказал, что разные оболочки работают по-разному. Любая оболочка, которую я знаю, вернется к поведению оболочки bourne, если она запущена как 'sh' – soulmerge

+0

Я видел различные реализации bourne shell (sh), которые ведут себя по-разному. Возможно, это уже не так. – topskip

+2

«С bash вы можете быть уверены, что bash всегда bash». Если это не другая версия Bash. Очевидно, что между основными номерами версий существуют существенные различия, но есть и некоторые незначительные номера версий. –

1

Переносимость. Я пишу #!/bin/sh, если что-то не становится очень болезненным, а затем я пишу #!/bin/bash. Мир меняется очень быстро, и я уверен, что в будущем будет легко убедить системных администраторов установить bash. Но я хеджирую свои ставки, используя Bourne для большинства вещей, что просто.

1

В Mac OS X/bin/sh не является оболочкой Bourne. (Но вы можете получить настоящий бурнеш на свежем мясе).

Чтобы определить традиционную оболочку Bourne, вы можете попробовать использовать circumflex^(caret) в качестве замены | (Труба).

См:

Традиционный Bourne Shell Семья,

http://www.in-ulm.de/~mascheck/bourne/

1

Я использую Bash, как мой шелл, но для сценариев я бы выбрать Bourne оболочки в любой день недели и в два раза В воскресенье. У Bash лучшие функции, удобство для пользователя и лучшие ошибки.

На самом деле, тот же материал, который заставляет меня выбирать Bash, когда я вхожу в систему, заставляет меня избегать этого при написании сценариев. Bash пытается сделать все приятным и приятным для пользователя, но за счет 776   kB исполняемый файл (на моей машине) по сравнению с 140   kB для оболочки Bourne. Почему мой сценарий заботится о дружелюбии? Любое усиление, которое я мог бы достигнуть благодаря использованию какой-то умной функции Bash, эффективно отменяется по площади корпуса, что более чем в пять раз больше.

У меня есть компьютеры под управлением Linux, FreeBSD и OS X. Хотя я редко что-то перемещаю между компьютерами, приятно иметь возможность. В сценарии оболочки Bourne вы просто вводите

#!/bin/sh 

и он просто работает. Всегда. Bash может быть распространен в Linux, но он не такой стандартизирован, как оболочка Bourne. В FreeBSD Bash по умолчанию не установлен. Он может быть установлен из портов, если системный администратор считает, что это хорошая идея, но даже после этого он заканчивается /usr/local/bin/bash (не /bin/bash). Таким образом, если вы все еще решите пойти с Башем, напишите

#!/usr/bin/env bash 

, чтобы сделать сценарий переносным. env найдет для вас оболочку, независимо от вашего вкуса Unix (пока она установлена).

В конце концов, это ваш выбор. Просто убедитесь, что ваши сценарии на самом деле соответствуют для оболочки, которую вы выбираете, и не полагайтесь на «sh», символически привязанные к «bash» или что-то подобное.

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