Bash или KornShell (КШ)? [закрытый]



Я не новичок в *nix, однако в последнее время я трачу много времени на приглашение. Мой вопрос в том, каковы преимущества использования Kornshell (ksh) или Bash Shell? Где подводные камни использования одного над другим?



хотите понять с точки зрения пользователя, а не чисто сценариев.

862   12  

12 ответов:

Баш.

различные реализации UNIX и Linux имеют различные реализации исходного уровня ksh, некоторые из которых являются реальными ksh, некоторые из которых являются реализациями pdksh, а некоторые из них являются просто символическими ссылками на некоторую другую оболочку, которая имеет личность "ksh". Это может привести к странным различиям в поведении выполнения.

по крайней мере, с bash вы можете быть уверены, что это одна база кода, и все, что вам нужно беспокоиться о том, что (обычно минимальная) версия Баш установлен. Сделав много сценариев практически на каждом современном (и не очень современном) UNIX, программирование на bash более надежно согласуется с моим опытом.

разница между Kornshell и Bash минимальна. Есть определенные преимущества один имеет над другим, но различия незначительны:

  • BASH гораздо проще установить приглашение, которое отображает текущий каталог. Сделать то же самое в Kornshell-это хакерство.
  • Kornshell есть ассоциативные массивы и bash не. Теперь, в последний раз я использовал ассоциативные массивы было... Дай подумать... Никогда.
  • Kornshell обрабатывает синтаксис петли немного лучше. Обычно вы можете установить значение в цикле Kornshell и иметь его доступным после цикла.
  • Bash обрабатывает получение кодов выхода из труб более чистым способом.
  • Kornshell имеет print команда, которая намного лучше, чем

Я ветеран 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".

КШ принял радикальный подход к этому - и представил print команда, которая фактически поддерживает оба метода (-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

    Ничего не найдено.