Принципы настройки tcsh

Возникает вопрос: как при таком обилии конфигурационных файлов производить настройку tcsh, и в каком порядке это делать? Ответить на него несложно, ибо изобилие это кажущееся, и на самом деле какое-то действительно серьёзное редактирование необходимо будет выполнить только в отношении одного-единственного файла.

Для начала обратимся к общесистемным конфигам /etc/csh.cshrc, /etc/csh.login, /etc/csh.logout -- и с удивлением обнаружим, что они пусты. То есть в /etc/csh.cshrc и /etc/csh.logout нет вообще ничего, кроме стандартной шапки и сообщения, что это общесистемные файлы. А в /etc/csh.login можно видеть лишь три закомментированные строки, необходимость снятия комментариев с которых не очевидна. То есть по умолчанию поведение оболочки tcsh определяется исключительно её предопределёнными при сборке параметрами и настройками конфигов в пользовательском каталоге.

Так что, если умолчальное поведение tcsh нас хоть сколько-нибудь устраивает, но требует корректив, то оставляем в покое общесистемные конфиги и обращаемся к конфигам пользовательским. Исходя из их назначения и порядка считывания, резонно было бы предположить, что в файле ~/.cshrc или ~/.tcshrc надо устанавливать параметры, необходимые при интерактивной работе в оболочке всегда, вне зависимости от того, запущена ли она при регистрации в системе или нет -- например, в терминальном окне системы X. В файле же ~/.login достаточно ограничиться только теми установками, которые должны быть общими для всего сеанса данного пользователя.

В сущности, как говаривал Аркадий Райкин, мы правы, но по существу -- не то чтобы глубоко заблуждаемся, но должны принимать во внимание некоторые коррективы.

Начнем с того, что понятие регистрационной оболочки и определённых в её конфиге параметров в полной мере применимы только к работе в чистой консоли. Открывая терминальное окно в Иксах, мы вместе с ним запускаем и свою командную оболочку -- но не как регистрационную, а как обычную интерактивную. Правда, в настройках некоторых эмуляторов терминалов можно предписать запуск оболочки как login shell, но это подчас приводит к ряду странностей в их поведении.

Далее, казалось бы, как общее свойство регистрационной оболочки логично было бы определить локально-зависимые переменные. Да, это возможно, но далеко не всегда оправданно. В современных дистрибутивах Linux системная локаль обычно определяется глобально, в общесистемных конфигурационных файлах (причём чуть не в каждом дистрибутиве -- по своему). А во FreeBSD понятие системной локали, по существу, отсутствует: здесь идеологически (да и практически) более правильно задавать локаль через класс пользователя.

При этом следует учитывать, что в текстовом режиме FreeBSD, вследствие восьмибитного внутреннего представления символов в консольном драйвере (syscons) её старых версий, использование кодировки UTF-8 не всегда возможно. Поэтому юникодовскую локаль в этой системе приходится указывать в конфигах, определяющих условия запуска Иксов (типа ~/.xinitrc, ~/.xsessionrc или ~/.Xclients).

Получается, что в файле ~/.login определять собственно и нечего. Кроме, разве что, команд инициализации терминала и установок его опций, типа tset и stty -- но многим ли они нужны в наше время на пользовательской машине? Кстати говоря, по умолчанию пользовательский ~/.login также фактически пуст -- единственная строка в нём имеет отношение к запуску древней игры fortune и может быть спокойно ликвидирована, хотя жить она тоже не мешает.

Что же, конфиг из ~/ -- юзеру легче. Значит, для редактирования у нас фактически остаются только два файла -- ~/.cshrc и ~/.tcshrc, потому что ~/.history заполняется автоматически, с файлом ~/.cshdirs вообще особая история, а в ~/.logout требуется (если вообще требуется) внести одну-две строки.


Содержание

. .