Bash или KornShell (ksh)?
Я не новичок в * nix, но в последнее время я проводил много времени в подсказке. Мой вопрос в том, каковы преимущества использования KornShell (ksh) или Bash Shell? Где ловушки использования одного над другим?
Глядя на понимание с точки зрения пользователя, а не на чисто сценарии.
Ответы
Ответ 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.