Сравнение оболочек Unix

9

Из основных оболочек Unix (bash, ksh, tcsh, zsh, другие?) Есть ли веские причины использовать один поверх другого?

  • Что является наиболее интерактивным / дружественным к командной строке?
  • Что является наиболее подходящим / интуитивным для написания сценариев?
  • Существуют ли основные встроенные функции, которые предлагает одна оболочка, а другие нет?
  • Любая из этих оболочек действительно хороша для одного типа функции, но не для другого? Или они все довольно хорошо округлены / гибкие?
  • Это просто вопрос личных предпочтений?

Я могу сделать это сообщество вики, если кто-то предпочитает.

Энди Уайт
источник

Ответы:

17

Текущий:

  • bash- Bourne снова shell, оболочка по умолчанию в большинстве дистрибутивов Linux. Достойные черты;
  • zsh - наиболее многофункциональный, но все еще редко используемый;
  • ksh - оболочка по умолчанию в Solaris, AIX и некоторых других приложениях;
  • tcsh - оболочка по умолчанию в различных * BSD-версиях;

Исторические:

  • sh- оригинальная оболочка Bourne (выпущена в 1977 году). Устарел от bash;
  • csh- оригинальная оболочка C (выпущена в 1978 году). Устаревшие по tcsh и ksh;

Обратите внимание, что bash, ksh и zsh являются производными от синтаксиса sh, а tcsh - от синтаксиса csh. Это два совершенно разных синтаксиса.

Функциональная схема (вики).

Vartec
источник
Большинство сценариев обычно написаны так, чтобы они были совместимы с sh, поскольку запуск сценария через sh обычно намного быстрее, чем bash.
Mikeage
Как это? В Linux / bin / sh является символической ссылкой на / bin / bash.
vartec
2
/ bin / sh не всегда является символической ссылкой на / bin / bash
Брэд Гилберт
1
Когда вы создаете экземпляр bash как «sh», он запускается в режиме «sh», который поддерживает подмножество команд bash. Я считаю, что синтаксис "sh" является стандартом POSIX.
duffbeer703
В Debian вы можете использовать 'dash' вместо '/ bin / sh'.
Drybjed
9

fish - это новая оболочка, которая, возможно, более интересна, чем другие, не потому, что она обязательно имеет больше функций, а потому, что они просто работают по умолчанию и потому, что рыба стремится к удобству использования.

Несколько скриншотов ( 1 , 2 , 3 , 4 ) достаточно, чтобы дать общее представление.

fish теперь стандартная оболочка на моем Mac на работе. Пойди разберись.

Питер Хилтон
источник
2

Если вы собираетесь изучать оболочку, отличную от sh/ bash, вы можете просто пойти дальше zsh. Я не думаю, что кто-то всерьез оспаривает, что это самая мощная и функциональная из альтернативных оболочек; конечно, все еще предстоит спорить.

Я слышал о хороших вещах fish, но никогда не пытался беспокоиться о них.

Админы я знаю , считать cshи tcshбыть мерзости , которые следует избегать любой ценой, и я согласен с ними , несмотря ни разу не были вынуждены поставить себя либо через оболочку.

kquinn
источник
2

Я бы порекомендовал хорошо знать bash, так как он один из самых распространенных (обычно по умолчанию в Linux). Лично я люблю zsh как свою интерактивную оболочку. У этого есть большие особенности завершения. Например, вы можете установить список хостов, и когда вы сделаете что-то вроде ssh Ser [tab], он попытается автоматически завершить один из этих хостов. Он также имеет рекурсивное перетаскивание, поэтому, если вы хотите найти все файлы JPEG в текущем и подкаталоге, вы можете использовать ls -ld **/*.jpg. В zsh есть много интересных функций (поиск файлов .zshrc людей), и вы можете установить для него «совместимость с bash», так что легко переключаться между ними. Если вы объедините это с GNU Screen, вы можете обнаружить, что с командной строкой работать довольно приятно.

Кайл Брандт
источник
1

Не забывайте свой другой вопрос. Наиболее распространенная оболочка Unix / Linux - самая популярная оболочка, вероятно, самая популярная по причине ;-)

Что бы это ни стоило, большинство людей не часто переключаются между оболочками, поэтому будет сложно получить всестороннее сравнение различных вариантов; вы с большей вероятностью увидите, как разные люди отстаивают достоинства своих любимых оболочек. Из всего, что я слышал о различных оболочках, все они предлагают одни и те же базовые функции (такие как перенаправление ввода / вывода, история команд и т. Д.), Поэтому личные предпочтения, вероятно, будут большим компонентом.

Дэвид З
источник
1

Убедительная причина использования ZSH, которая не была упомянута, это режим vi и режим emacs .

Для тех, кто любит использовать свою мышечную память в оболочке, это убийственная особенность.

И для тех, кто предпочитает emacs, вы также можете использовать эти комбинации клавиш, но истинные сторонники emacs, вероятно, скажут, что emacs - их любимая оболочка.

;-)

Somantra
источник
0

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

Винсент де Баер
источник
0

Так же, как Heads Up: Ubuntu по умолчанию использует "sh" для "dash", что в прошлом приводило к некоторым проблемам с совместимостью с POSIX. Видимо, эхо-команды немного отличаются.

Лимбус
источник