Переменные среды не только для пользовательских предпочтений. Они представляют собой общий механизм передачи различной информации о настройках от родительского процесса к дочерним процессам, которые он запускает.
Существует множество случаев, когда процесс устанавливает конкретные переменные среды, чтобы влиять только на процессы, которые он запускает. Например, сценарий может намеренно сбрасывать настройки локали для команд, которые он запускает, так что он может анализировать выходные данные из них. Сценарии сборки для многих больших пакетов программ используют вложенные вызовы make
этих координат друг с другом через переменные среды. Специализированным инструментам может потребоваться изменить условия работы других программ, которые они запускают, выполняя трюки с $ LD_PRELOAD или $ PATH.
Если что-то, что пользователь делает в другом окне, когда длинная компиляция выполняется в другом, просто волшебным образом изменит переменные окружения всех его процессов за его спиной, это приведет к безумию и хаосу.
Другие переменные среды содержат информацию о конкретном сеансе, в котором запущен процесс. Программы ожидают, что $ TERM описывает набор команд конкретного терминала (или эмулятора терминала), к которому они подключены; выполнение общих настроек для каждого пользователя сделает невозможным вход в одну и ту же систему с несколькими различными типами терминалов. Даже если у вас есть только одна часть терминального оборудования и вы никогда не входите удаленно, такие программы, как, например, screen
зависят от установки другого $ TERM для процессов, которые выполняются внутри их сеанса.
Лучше было бы задать вопрос: почему мы используем механизм связи процесс-подпроцесс для настройки предпочтений пользователя, а не базу данных для каждого пользователя?
Ответ: Потому что он работает достаточно хорошо , и выгоды от создания базы данных для каждого пользователя не достаточно большой , что работа меняется все , чтобы использовать , что вместо переменных окружения будет сделано.
(Я могу думать очень мало настроек предпочтений там , где не было бы некоторые случаи использования , где это удобно , чтобы изменить их только для выполнения одного сценария, например. Так что , чтобы не потерять функциональность, все еще необходимо будет переопределение путем переменные среды, что приводит к дополнительной сложности и более запутанным пользователям).
Это не так, как будто альтернативы не существует . Например, ресурсы X относятся к сеансу дисплея, а не к процессу. Но они труднодоступны для программ командной строки - и программы командной строки обычно должны работать для удаленных входов в систему, к которым даже не подключен X-сервер.