Que font les scripts dans /etc/profile.d?

Je suis en train de lire des scripts de shell de base depuis la command line Linux et la bible de script shell .

Il indique que le file /etc/profile définit les variables d'environnement au démarrage du shell Bash. Le directory /etc/profile.d contient d'autres scripts qui contiennent des files de démarrage spécifiques à l'application, qui sont également exécutés au démarrage par le shell.

Pourquoi ces files ne font-ils pas partie de / etc / profile s'ils sont également critiques pour le démarrage de Bash?

Si vous voulez dire, "Pourquoi ne sont-ils pas simplement combinés en un seul script géant?", La réponse est:

  1. Parce que ce serait un cauchemar de maintenance pour les gens qui sont responsables des scripts.
  2. Le fait que les scripts soient chargés en tant que modules indépendants rend l'set du système plus dynamic – des scripts individuels peuvent être ajoutés et supprimés sans affecter les autres. Etc.
  3. Parce qu'ils sont chargés via / etc / profile ce qui fait qu'ils font partie du bash "profil" de la même façon de toute façon.

Si ces files sont des files de démarrage spécifiques à l'application qui ne sont pas essentiels au démarrage de Bash, alors pourquoi font-ils partie du process de démarrage? Pourquoi ne sont-ils pas exécutés uniquement lorsque les applications spécifiques, pour lesquelles ils contiennent des parameters, sont exécutées?

Cela me semble comme une question de philosophie de design plus large que je vais split en deux. La première question concerne la valeur et l'opportunité de l'utilisation de l'environnement shell. A-t-il une valeur positive? Oui, c'est utile. Est-ce la meilleure solution à tous les problèmes de configuration? Non, mais c'est très efficace pour gérer des parameters simples, et aussi largement reconnu et compris. Contrairement à cela, en décidant de configurer de telles choses de manière hétérogène, peut-être que $ PATH pourrait être géré par un outil indépendant, les outils préférés tels que $ EDITOR pourraient être dans un file sqlite quelque part, format personnalisé ailleurs, etc. – n'utilise pas seulement les variables env et /etc/profile.d semble soudainement plus simple? Vous savez probablement déjà ce qu'est une variable env, comment ils fonctionnent et comment les utiliser, par opposition à l'apprentissage de 5 mécanismes complètement différents pour 5 aspects omniprésents différents de ce qui est appelé de manière appropriée «l'environnement».

La deuxième question est la suivante: «Le démarrage est-il le moment approprié pour cela?», Ce qui soulève l'objection que ce n'est pas très efficace (toutes datatables qui peuvent ou ne peuvent pas être utilisées, etc.). Mais:

  • De manière réalist, ce ne sont pas autant de données, en partie parce que personne dans leur esprit ne l'utilise pour plus que quelques parameters simples (puisqu'il existe d'autres moyens de configurer une application).
  • Si on l'utilise judicieusement, en ce qui concerne les choses qui sont communément invoquées, la configuration, par exemple, $ CFLAGS par défaut d'un file quelque part à chaque fois que vous invoquerez gcc serait less efficace. Gardez à l'esprit que la quantité de memory impliquée est encore infinitésimale.
  • Cela peut impliquer des choses systémiques auxquelles plus d'une application peut être impliquée, et la coquille est un terrain d'entente .

Plus pourrait être ajouté à cette list, mais j'espère que cela vous donne une idée des avantages et des inconvénients de la question – le principal «pro» et le «con» majeur étant qu'il s'agit d'un espace de noms global.

Ces files sont spécifiques à une application, mais sont fournis au démarrage du shell, et non au démarrage de l'application. Un directory de configuration est utilisé ici pour la même raison qu'il se trouve dans de nombreux autres endroits. Cela permet à une application ou un progiciel de modifier les configurations. Cela ne serait pas possible sans une configuration fractionnée, car plusieurs packages essayant de gérer / mettre à jour un seul file de configuration qui peut également être modifié par l'user serait bogué et désordonné.

Aussi une note de côté, /etc/profile est fournie par tous les shells, pas seulement bash. Le file de configuration spécifique bash est bashrc et provient uniquement des shells interactifs.