Bash или KornShell (КШ)? [закрытый]
Я не новичок в *nix, однако в последнее время я трачу много времени на приглашение. Мой вопрос в том, каковы преимущества использования Kornshell (ksh) или Bash Shell? Где подводные камни использования одного над другим?
хотите понять с точки зрения пользователя, а не чисто сценариев.
12 ответов:
Баш.
различные реализации UNIX и Linux имеют различные реализации исходного уровня ksh, некоторые из которых являются реальными ksh, некоторые из которых являются реализациями pdksh, а некоторые из них являются просто символическими ссылками на некоторую другую оболочку, которая имеет личность "ksh". Это может привести к странным различиям в поведении выполнения.
по крайней мере, с bash вы можете быть уверены, что это одна база кода, и все, что вам нужно беспокоиться о том, что (обычно минимальная) версия Баш установлен. Сделав много сценариев практически на каждом современном (и не очень современном) UNIX, программирование на bash более надежно согласуется с моим опытом.
разница между Kornshell и Bash минимальна. Есть определенные преимущества один имеет над другим, но различия незначительны:
- BASH гораздо проще установить приглашение, которое отображает текущий каталог. Сделать то же самое в Kornshell-это хакерство.
- Kornshell есть ассоциативные массивы и bash не. Теперь, в последний раз я использовал ассоциативные массивы было... Дай подумать... Никогда.
- Kornshell обрабатывает синтаксис петли немного лучше. Обычно вы можете установить значение в цикле Kornshell и иметь его доступным после цикла.
- Bash обрабатывает получение кодов выхода из труб более чистым способом.
- Kornshell имеет
Я ветеран korn-shell, поэтому знаю, что я говорю с этой точки зрения.
тем не менее, мне комфортно с Bourne shell, ksh88 и ksh93, и я знаю, какие функции поддерживаются в которых.
для интерактивного использования, возьмите все, что соответствует вашим потребностям. Эксперимент. Мне нравится иметь возможность использовать одну и ту же оболочку для интерактивного использования и для программирования.
я перешел с ksh88 на SVR2 на tcsh, на ksh88sun (что добавило значительную поддержку интернационализации) и ksh93. Я попробовал bash, и ненавидел его, потому что это сгладило мою историю. Потом я обнаружил
shopt -s lithistи все было хорошо. (Тегlithistопция гарантирует, что новые строки сохраняются в вашей команде история.)для программирования оболочки я бы серьезно рекомендовал ksh93, если вам нужен последовательный язык программирования, хорошее соответствие POSIX и хорошая производительность, как и многие общие команды unix будьте доступны в виде встроенных функций.
если вы хотите использовать переноску как минимум. И сделать уверен, у вас есть хороший набор тестов.
есть много тонких различий между оболочками. Рассмотрим, например, чтение из трубы:
b=42 && echo one two three four | read a b junk && echo $bэто приведет к различным результатам в различных оболочках. Korn-shell запускает трубопроводы сзади вперед; последний элемент в трубопроводе работает в текущем процессе.
другой пример, иллюстрирующий последовательность:
echoсама команда, которая была устаревшей из-за разделения между BSD и SysV unix, и каждый из них ввел свое собственное соглашение о том, чтобы не печатать новые строки (и другое поведение). Результат этого все еще можно увидеть во многих сценариях "configure".КШ принял радикальный подход к этому - и представил
-nопция от BSD, и трейлинг\cспециальный символ из SYSV)однако для серьезного системного программирования я бы рекомендовал что-то другое, чем оболочка, например python, perl. Или взять это шаг вперед, и использовать платформу, как марионетка - которая позволяет наблюдать и корректировать состояние целых кластеров систем, с хорошим аудитом.
Программирование оболочки похоже на плавание в неизведанных водах или еще хуже.
программирование на любом языке требует знания его синтаксиса, интерфейсов и поведения. Программирование оболочки ничем не отличается.
У меня нет опыта работы с ksh, но я использовал как bash, так и zsh. Я предпочитаю ЗШ за Баш, потому что его поддержка очень мощная файлов по имени, переменная расширение модификаторы, и быстрее автодополнение по Tab.
вот краткое вступление:http://friedcpu.wordpress.com/2007/07/24/zsh-the-last-shell-youll-ever-need/
Это немного Битва Unix против Linux. Большинство, если не все дистрибутивы Linux имеют bash установлен и KSH необязательно. Большинство систем Unix, таких как Solaris, AIX и HPUX имеют ksh по умолчанию.
лично я всегда использую ksh, мне нравится завершение vi, и я в значительной степени использую Solaris для всего.
для скриптов, я всегда использую КШ потому что он сглаживает gotchas.
но я найти Баш более удобный для интерактивного использования. Для меня это emacs привязки клавиш и завершение вкладки являются основными преимуществами. Но это в основном сила привычки, а не какая-либо техническая проблема с КШ.
@foxxtrot
на самом деле, стандартная оболочка оболочки Bourne (
sh)./bin/shна Linux-это на самом делеbash, но если вы нацелены на кросс-платформенные скрипты, вам лучше придерживаться особенностей оригинальной оболочки Bourne или писать ее в чем-то вродеperl.
мой ответ будет выбрать один и выучить как использовать его. Они оба приличные снаряды; Баш, вероятно, имеет больше колокола и свистки, но они оба имеют основные функции, которые вы хотите. bash более универсально доступен в эти дни. Если вы используете Linux все время, просто придерживайтесь его.
Если вы программируете, пытаясь придерживаться простого " sh " для переносимости-это хорошая практика, но тогда с bash доступны так широко в эти дни, что немного советов, вероятно, немного старомодный.
узнайте, как использовать завершение и историю вашей оболочки; иногда читайте manpage и попробуйте узнать несколько новых вещей.
во-первых, bash имеет завершение вкладки. Одного этого достаточно, чтобы я предпочел его КШ.
Z shell имеет хорошее сочетание уникальных функций ksh с хорошими вещами, которые предоставляет bash, а также гораздо больше вещей на вершине этого.
доступен в большинстве Unix-системы, КШ стандартно-comliant, четко спланированное и хорошо продуманное. Я думаю, что книги, помогает в ksh достаточно и ясно, особенно книга О'Рейли. Баш-это масса. Я держу его как корневую оболочку входа для Linux только дома.
для интерактивного использования я предпочитаю zsh на Linux / UNIX. Я запускаю скрипты в zsh, но я буду тестировать большинство моих скриптов, функций в AIX ksh.
bash является эталоном, но это в основном потому, что вы можете быть уверены, что он установлен на каждом *nix там. Если вы планируете распространять сценарии, используйте Bash.
Я не могу действительно решить фактические различия в программировании между оболочками, к сожалению.
Баш является стандартом для Linux.
Мой опыт заключается в том, что легче найти помощь для bash, чем для ksh или csh.
Comments