Лучше ли писать сценарии Bash или сценарии Bourne? Моя команда пишет сценарии Bourne, но я не совсем понимаю, почему.Bash or Bourne Scripts?
Если это вопрос священной войны (то есть: vim vs. emacs), просто ответьте: священная война.
Лучше ли писать сценарии Bash или сценарии Bourne? Моя команда пишет сценарии Bourne, но я не совсем понимаю, почему.Bash or Bourne Scripts?
Если это вопрос священной войны (то есть: vim vs. emacs), просто ответьте: священная война.
Это зависит от того, на что нацелена ваша целевая платформа.
Если вы используете только таргетинг, скажем, основные дистрибутивы Linux и Mac OS X, тогда вы можете быть уверены, что эти системы будут доступны. В других UNIX (например, AIX, Solaris, HP-UX) bash может не обязательно присутствовать, поэтому Bourne - более безопасный выбор. Если bash доступен, я могу думать, что нет причин, по которым вы можете предпочесть Bourne.
Вы можете быть уверены, что оболочка Bourne будет установлена на любом компьютере Unix. Да, Bash вездесущ на Linux, но весь мир не Linux.
В некотором роде, я могу думать только о трех причинах: обратная совместимость, переносимость или «так мы всегда это делали». –
«Bash вездесущ на Linux, но весь мир не Linux». Это была моя вера раньше, затем я начал работать с Solaris и HP-UX машинами. Я думал, что могу писать сценарии оболочки в Bash для этих машин, о как я ошибался. Но это был хороший скромный опыт обучения, теперь я всегда использую оболочку bourne и только синтаксис, который, как я знаю, совместим с POSIX. – Anders
Ну, это вопрос вкуса, но для начала сценарии оболочки bourne можно запускать с помощью bash, и я думаю, что у bash есть функции, которые не может быть запущен Bourne.
Главное, чтобы помнить, что не все программные ссылки OS/bin/sh в/bin/bash, как это делают некоторые дистрибутивы Linux. Многие сценарии написаны для bash, но начинаются с:
#!/bin/sh
так, чтобы они ломались, например. в Ubuntu. Итак, когда вы пишете Баш скрипт, всегда пишут:
#!/bin/bash
Один из моих орков коров был сумасшедшим в Ubuntu, потому что они использовали что-то другое, кроме bash для/bin/sh. Я сказал ему, что он должен злиться на идиотов, которые неправильно маркировали свои сценарии bash как скрипты sh, но он не согласился бы со мной. –
Нет, вы всегда должны писать '#!/Usr/bin/env bash'. Bash может быть установлен в/bin/bash на вашем компьютере, но это нестандартизировано и не универсально. Однако, если вы придерживаетесь '#!/Bin/sh', вы, вероятно, будете в порядке. –
Я бы для Bourne Again Shell, как Борн оболочка может незначительно отличаться среди реализаций UNIX. С bash
вы можете быть уверены, что bash
всегда bash
.
Я бы не сказал, что разные оболочки работают по-разному. Любая оболочка, которую я знаю, вернется к поведению оболочки bourne, если она запущена как 'sh' – soulmerge
Я видел различные реализации bourne shell (sh), которые ведут себя по-разному. Возможно, это уже не так. – topskip
«С bash вы можете быть уверены, что bash всегда bash». Если это не другая версия Bash. Очевидно, что между основными номерами версий существуют существенные различия, но есть и некоторые незначительные номера версий. –
Переносимость. Я пишу #!/bin/sh
, если что-то не становится очень болезненным, а затем я пишу #!/bin/bash
. Мир меняется очень быстро, и я уверен, что в будущем будет легко убедить системных администраторов установить bash. Но я хеджирую свои ставки, используя Bourne для большинства вещей, что просто.
В Mac OS X/bin/sh не является оболочкой Bourne. (Но вы можете получить настоящий бурнеш на свежем мясе).
Чтобы определить традиционную оболочку Bourne, вы можете попробовать использовать circumflex^(caret) в качестве замены | (Труба).
См:
Традиционный Bourne Shell Семья,
Я использую 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» или что-то подобное.
только при условии, что это не csh – 2010-04-27 16:57:32
[Csh Программирование считается вредным] (http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/) –
Код REAL программистов в Корне! :-P Я всегда предпочитаю sh по сравнению с bash, потому что большинство синтаксических/особенных вещей будет одинаковым или, по крайней мере, совместимым с sh sh в большинстве дистрибутивов; тогда как bash просто недоступен в некоторых случаях, если вы работаете с AIX и т. д. Но если вы работаете с сценариями только для Linux, bash предпочтительнее. Делает для намного более легкого программирования imho. –