Почему эти файлы не являются частью / etc / profile, если они также важны для запуска Bash?
Если вы имеете в виду «Почему они не просто объединены в один гигантский сценарий?», Ответ:
- Потому что это был бы кошмар для тех, кто отвечает за сценарии.
- Поскольку загрузка сценариев в качестве независимых модулей делает всю систему более динамически настраиваемой - отдельные сценарии можно добавлять и удалять, не затрагивая другие. И т.п.
- Потому что они загружаются через / etc / profile, что в любом случае делает их частью "профиля" bash.
Если эти файлы являются файлами запуска приложения, не критичными для запуска Bash, то почему они являются частью процесса запуска? Почему они не запускаются только при выполнении определенных приложений, для которых они содержат настройки?
Это кажется мне более широким вопросом философии дизайна, который я разделю на две части. Первый вопрос касается ценности и целесообразности использования среды оболочки. Это имеет положительное значение? Да, это полезно. Это лучшее решение для всех проблем конфигурации? Нет, но он очень эффективен для управления простыми параметрами, а также широко признан и понят. В отличие от этого, если принять решение о гетерогенной настройке таких вещей, возможно, $ PATH может управляться отдельным независимым инструментом, предпочтительные инструменты, такие как $ EDITOR, могут находиться где-то в файле sqlite, а материал $ LC lang может быть в текстовом файле с пользовательский формат где-то еще и т. д. - не только с помощью переменных env и/etc/profile.d
вдруг показаться проще? Вы, наверное, уже знаете, что такое переменная env, как они работают и как их использовать, в отличие от изучения 5 совершенно разных механизмов для 5 различных вездесущих аспектов того, что соответствующим образом называется «средой».
Второй вопрос: «Является ли время запуска подходящим для этого?», В связи с чем возникает возражение, что он не очень эффективен (все эти данные, которые могут или не могут быть использованы, и т. Д.). Но:
- Реально, это не так уж много данных, отчасти потому, что никто в здравом уме не будет использовать их для более чем нескольких простых параметров (поскольку существуют другие способы настройки приложения).
- Если он используется разумно, в отношении вещей, которые обычно вызываются, то установка, например, $ CFLAGS по умолчанию из файла где-нибудь при каждом вызове
gcc
, будет менее эффективной. Имейте в виду, что количество задействованной памяти, опять же, бесконечно мало.
- Он может включать системные вещи, с которыми может быть связано более одного приложения, и оболочка является общей почвой .
К этому списку можно добавить больше, но, надеюсь, это даст вам некоторое представление о плюсах и минусах проблемы - основные «за» и «против» в том, что это глобальное пространство имен.
Does it have positive ... and understood.
Что ты здесь пытаешься сказать? Я понял все, кроме этого пункта.profile.d
Каталог работает только потому , что его содержание получены путем/etc/profile
, который задается оболочками , такими , как Баш как файл запуска (см Призыва вman bash
); если вы редактируете/etc/profile
, вы можете отключить/etc/profile.d
./etc/profile.local
Похоже, это изобретение SUSE, предположительно откуда-то полученное,/etc/profile
чтобы вы могли положить туда свои вещи. Однако, если вы переместите его в систему, отличную от SUSE, и не будете вносить никаких других изменений, он не будет использоваться ничем.Эти файлы относятся к конкретному приложению, но создаются при запуске оболочки, а не при запуске приложения. Каталог конфигурации используется здесь по той же причине, что и во многих других местах. Это позволяет приложению или программному пакету изменять конфигурации. Это было бы невозможно без раздельной конфигурации, так как несколько пакетов, пытающихся управлять / обновить один файл конфигурации, который также может быть изменен пользователем, были бы глючными и грязными.
Также примечание,
/etc/profile
поставляемое всеми оболочками, а не только bash. Конфигурационный файл bash - это bashrc, он поставляется только для интерактивных оболочек.источник
ответ Джорданма неверен.
/etc/profile
поставляется не всеми оболочками. Как вы указываете, это не источникомcsh
,tcsh
- я не уверен в этомzsh
. Он поставляется производными Bourne shell (sh
), такими как Korn Shell (ksh
) и BASH (bash
).csh
использует/etc/login
. Люди, которые склонны использовать исключительно производные Borne Shell, склонны забывать о существовании других оболочек. Они добавляют что-то,/etc/profile
ожидая, что это применимо ко «всем пользователям», и затем удивляются, когда у нечетного пользователя C Shell (а у нас странный лот) нет того материала, в котором он настроен/etc/profile
.Тем не менее, люди склонны забывать о существовании других производных оболочек Borne Shell. Если они используют
bash
илиksh
, они могут свободно добавлять синтаксис,/etc/profile
который недопустим в Bourne Shell, как, например, определение переменной и ее экспорт в той же строке. Затем вы получаете некоторый скрипт, который делает,#!/bin/sh
и он задыхается от синтаксиса./etc/profile
следует придерживаться синтаксиса, совместимого с Bourne Shell.Точно так же вы должны придерживаться его по своему усмотрению
.profile
(используйте,.bash_profile
если вам нужен некоторый синтаксис bash) - это может быть немного дополнительная печать, но это дополнительная печать, которую вы делаете все один раз. Ссылка,${HOME}
а не~
и т. Д. Некоторые версии Unix, cron-задания выполняютсяsh
, каждая ваша строкаMakefile
обрабатываетсяsh
, поэтому, если вы работаете с несколькими версиями UNIX, то стоит поддерживать.profile
совместимость оболочки Bourne. Как системный администратор, я не могу сказать вам, сколько раз я помогал кому-то, настраивая его.profile
на совместимость с Bourne Shell.В Linux
/bin/sh
это ссылка на/bin/bash
нее, и когда вы ее запускаете, она выглядит как путь, который использовался для ее запуска, и (теоретически) ограничивается только тем, что поддерживает Bourne Shell. Аналогично,vi
в Linux действительноvim
, опять же, ограничивает себя. Изредка вы видите особенности «прокачки». Время от времениvim
притворяется, чтоvi
делает что-то,vim
чтоvi
не поддерживает, потому что авторыvim
забыли отключить это в режиме «обратной совместимости vi». Я не удивлюсь, если уbash
притворства будутsh
какие-то схожие черты. Не удивлюсь, если какая-то функция «работает в Borne Shell в Linux», но не в UNIX на базе System V или BSD (AIX, OpenBSD и т. Д.).источник
/bin/sh
есть ссылка на/bin/bash
"? Это правильное заявление.