Подтвердить что ты не робот

Bash или KornShell (ksh)?

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

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

4b9b3361

Ответ 1

Bash.

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

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

Ответ 2

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

  • BASH гораздо проще установить приглашение, отображающее текущий каталог. Сделать то же самое в Kornshell хакерское.
  • Kornshell имеет ассоциативные массивы, а Bash - нет. Теперь, в последний раз, когда я использовал Ассоциативные массивы, я подумал... Никогда.
  • Kornshell обрабатывает синтаксис цикла немного лучше. Обычно вы можете установить значение в цикле Kornshell и получить его после цикла.
  • BASH обрабатывает коды выхода из труб более чистым способом.
  • У команды Kornshell есть команда print, которая лучше, чем команда echo.
  • BASH имеет завершение вкладок. В старых версиях
  • Kornshell имеет команду истории r, которая позволяет мне быстро запускать старые команды.
  • Kornshell имеет синтаксис cd old new, который заменяет old на new в вашем каталоге и на компакт-дисках. Это удобно, когда вы находитесь в каталоге под названием /foo/bar/barfoo/one/bar/bar/foo/bar, и вам нужно cd to /foo/bar/barfoo/two/bar/bar/foo/bar В Kornshell вы можете просто сделать cd one two и сделать с ним. В BASH вам нужно cd ../../../../../two/bar/bar/foo/bar.

Я старый парень из Kornshell, потому что я узнал Unix в 1990-х годах, и тогда это была оболочка выбора. Я могу использовать BASH, но время от времени я его расстраиваюсь, потому что по привычке я использую небольшую функцию, которую Kornshell имеет, что Bash нет, и она не работает. Поэтому, когда это возможно, я установил Kornshell в качестве моего значения по умолчанию.

Однако я расскажу вам, чтобы узнать BASH. Bash теперь реализован на большинстве систем Unix, а также на Linux, и для обучения Bash и получения помощи, кроме Kornshell, доступно просто больше ресурсов. Если вам нужно сделать что-то экзотическое в BASH, вы можете пойти в Stackoverflow, отправить свой вопрос, и через несколько минут вы получите десяток ответов - и некоторые из них будут даже правильными!

Если у вас есть вопрос Kornshell и опубликуйте его на Stackoverflow, вам придется подождать, пока какой-нибудь старый хакер, как я, просыпаюсь со своего дремоты, прежде чем вы получите ответ. И, забудьте получить ответ, если они слушают пудинг в доме преклонного возраста в тот день.

BASH теперь просто оболочка выбора, поэтому, если вам нужно чему-то научиться, возможно, вы также пойдете с популярным.

Ответ 3

Я ветеран-корн-оболочка, поэтому знаю, что я говорю с этой точки зрения.

Однако мне комфортно работать с оболочкой Bourne, ksh88 и ksh93, и я знаю, какие функции поддерживаются в ней.

Для интерактивного использования возьмите все, что вам подходит. Эксперимент. Мне нравится иметь возможность использовать ту же оболочку для интерактивного использования и программирования.

Я пошел от ksh88 на SVR2 до tcsh, до ksh88sun и ksh93. Я попробовал bash, и ненавидел его, потому что он сплющил мою историю. Затем я обнаружил

shopt -s lithist

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

Для программирования оболочек я серьезно рекомендую ksh93, если вы хотите согласованный язык программирования, хорошее соответствие POSIX и хорошую производительность, так как многие общие команды unix могут быть доступными как встроенные функции.

Если вы хотите, чтобы переносимость использовала хотя бы то, и другое. И убедитесь, что у вас хороший набор тестов.

Есть много тонких различий между оболочками. Рассмотрим, например, чтение из трубы:

b=42 && echo one two three four |
    read a b junk && echo $b

Это приведет к различным результатам в разных оболочках. Корн-раковина управляет трубопроводами спереди назад; последний элемент в конвейере работает в текущем процессе.

Еще один пример, иллюстрирующий последовательность: сама команда echo, которая была устаревшей из-за разделения между BSD и SYSV unix, и каждый из них представил свое собственное соглашение, чтобы не печатать новые строки (и другое поведение). Результат этого все еще можно увидеть во многих сценариях configure.

Кш радикально подходил к этому - и ввел команду print, которая фактически поддерживает оба метода (опция -n из BSD и специальный символ \c от SYSV)

Однако для серьезных системных программ я бы рекомендовал нечто иное, чем оболочку, такую ​​как python, perl. Или сделайте еще один шаг и используйте платформу, такую ​​как марионетка, которая позволяет вам наблюдать и исправлять состояние целых кластеров систем с хорошим аудитом.

Программное обеспечение оболочки похоже на плавание в неизведанных водах или хуже.

Программирование на любом языке требует знакомства с его синтаксисом, его интерфейсами и поведением. Программирование оболочки не отличается.

Ответ 4

Не забывайте zsh.

Ответ 5

Это бит Битва Unix против Linux. Большинство, если не все дистрибутивы Linux имеют bash, а ksh - необязательные. Большинство систем Unix, таких как Solaris, AIX и HPUX, по умолчанию имеют ksh.

Лично я всегда использую ksh, мне нравится завершение vi, и я в значительной степени использую Solaris для всего.

Ответ 6

Для скриптов я всегда использую ksh, потому что он сглаживает gotchas.

Но я нахожу bash более удобным для интерактивного использования. Для меня главными преимуществами являются привязки клавиш emacs и вкладка. Но это в основном сила привычки, а не какая-либо техническая проблема с ksh.

Ответ 7

@foxxtrot

Собственно, стандартная оболочка - это оболочка Бурна (sh). /bin/sh на Linux на самом деле bash, но если вы нацелены на кросс-платформенные скрипты, вам лучше придерживаться особенностей оригинальной оболочки Bourne или писать ее как-то вроде perl.

Ответ 8

У меня нет опыта работы с ksh, но я использовал оба bash и zsh. Я предпочитаю zsh поверх bash из-за его поддержки очень мощного файлообмена, модификаторов модификации расширения и более быстрого завершения вкладок.

Вот краткое введение: http://friedcpu.wordpress.com/2007/07/24/zsh-the-last-shell-youll-ever-need/

Ответ 9

Мой ответ будет "выбрать один и узнать, как его использовать". Они оба достойные снаряды; bash, вероятно, имеет больше колоколов и свистков, но у них есть основные функции, которые вам понадобятся. bash является более универсальным в наши дни. Если вы все время используете Linux, просто придерживайтесь его.

Если вы программируете, попытка придерживаться простой "sh" для переносимости - это хорошая практика, но затем с bash доступным настолько широко в эти дни, что немного советов, вероятно, немного старомодно.

Узнайте, как использовать завершение и историю вашей оболочки; иногда читайте manpage и пытайтесь изучить несколько новых вещей.

Ответ 10

Доступный в большинстве UNIX-систем, ksh является стандартным, четко разработанным, хорошо округленным. Я думаю, что книги, помогает в кшх достаточно и ясны, особенно книга О'Рейли. Bash - масса. Я сохраняю его как корневую оболочку для Linux только для дома.

Для интерактивного использования я предпочитаю zsh в Linux/UNIX. Я запускаю скрипты в zsh, но я проведу большинство своих скриптов, функции в AIX ksh, хотя.

Ответ 11

С одной стороны, bash имеет завершение табуляции. Этого достаточно, чтобы заставить меня отдать предпочтение ksh.

Z-оболочка имеет отличную комбинацию уникальных возможностей ksh с приятными вещами, которые bash обеспечивает, плюс много больше вещей сверху того, что.

Ответ 12

Bash является эталоном, но в основном потому, что вы можете быть уверены, что он установлен на каждом * nix. Если вы планируете распространять скрипты, используйте Bash.

Я, к сожалению, не могу действительно реально решить проблемы с программированием между оболочками.

Ответ 13

Bash является стандартом для Linux.
Мой опыт в том, что легче найти помощь для bash, чем для ksh или csh.