Tcsh: зачем он нужен?
Для пользователя любого универсального дистрибутива Linux'а вопрос, вынесенный в заголовок, представляется более чем резонным. Ведь в его распоряжении по умолчанию имеется командная оболочка bash, причём, скорее всего уже настроенная "из коробки" -- если и не идеальным для него образом, то вполне разумно и легко корректируемо, как показано на предыдущих страницах.
Иное дело во FreeBSD. Здесь в качестве командной оболочки для обычного пользователя (login shell) по умолчанию выступает так называемая /bin/sh
-- разновидность оболочки Альмквиста (ash
), входящая в базовый комплект (base) FreeBSD Distributions и подлежащая установке при любом типе инсталляции этой ОС. Оболочка /bin/sh
полностью соответствует стандарту POSIX для командных оболочек, описанному в соответствующем документе: /bin/sh
можно видеть здесь.
Однако следование стандарту, аки воинскому уставу, имеет оборотную сторону: в /bin/sh
не содержится ничего, выходящего за рамки стандарта. В частности, он лишён большинства даже тех элементарных функций интерактивной работы, которые пользователями Linux, благодаря оболочке bash
, впитываются с первых шагов в этой системе, без всяких настроек своего умолчального шелла.
Конечно, и для пользователей FreeBSD дело обстоит не так печально, как кажется на первый взгляд: в этой системе в качестве портов и пакетов доступны практически все командные оболочки, созданные человечеством, в том числе, и bash
вместе с bash-completion
, и zsh
. Однако их надо еще тем или иным способом установить и, главное, настроить: без должным образом составленных пользовательских конфигов ни bash
, ни, особенно, zsh
не покажут своих интерактивных возможностей во всём блеске.
Да и стоит ли умножать сущности установкой дополнительных пакетов или портов, когда под рукой пользователя FreeBSD, в базовом комплекте FreeBSD Distributions уже имеется развитая командная оболочка tcsh
, с точки зрения интерактивных возможностей превосходящая bash
... ну хорошо, специально для bash-фанов сформулирую мягче: превосходит чистый bash
, который способен достигнуть функциональности tcsh
только вместе с bash-completion
.
Конечно, оболочка tcsh
не поддерживает многих изощренных интерактивных функций zsh
, однако все ли они нужны каждодневно? А большинство функций zsh
из числа тех, которые необходимы регулярно, в tcsh
имеются.
Что же до простоты настройки -- тут уж tcsh
оставляет далеко позади обе конкурирующие оболочки: для его конфигурирования требуется правка всего двух очень прозрачно устроенных конфигурационных файлов. Пользователь же bash
должен всё время помнить о том, какие параметры обеспечиваются собственно профильными файлами этой оболочки (bash_profile
и bashrc
), а к каким он получает доступ благодаря библиотеке readline
с её собственным конфигом (inputrc
), какие функции доступны ему при базовой установке, а какие содержатся только в bash-completion
. Что же касается zsh
, то конфигурирование его для достижения полной функциональности вообще представляет собой очень не тривиальную задачу, требующую чтения многостраничной документации.
Правда, об одном коренном и неустранимом "недостатке" tcsh
я должен предупредить сразу: даже виртуозное владение всем предоставляемым им функционалом не освобождает от необходимости хотя бы базовых представлений о синтаксисе POSIX Shell-совместимых интерпретаторов, к классу коих принадлежит поминаемый ранее /bin/sh
: все общесистемные сценарии во FreeBSD написаны именно на нём, а язык интерпретатора tcsh с ними несовместим.
Впрочем, пользователи bash
и zsh
, относимых к классу sh-совместимых интерпретаторов, тоже должны помнить об отличиях языков сценариев для своих оболочек от чистого shell-скриптинга: не случайно в фундаментальной книге по программированию на Shell автор её, Дэвид Тейнсли, постоянно оговаривает все случаи использования "bash'измов".
Что же до языка C-Shell, используемого в интерпретаторе tcsh
, то его несовместимость с чистым POSIX Shell компенсируется простотой и лаконичностью, что делает его более чем пригодным для сочинения пользовательских сценариев индивидуального применения.
Все эти положения я и постараюсь осветить в настоящем очерке. А уж дальше пользователь сам решит, потребуется ли ему установка дополнительных портов или пакетов, или функциональности tcsh
хватит за глаза.
Содержание . .