Pourquoi ces fichiers ne font-ils pas partie de / etc / profile s’ils sont également essentiels au démarrage de Bash?
Si vous voulez dire "Pourquoi ne sont-ils pas simplement combinés dans un script géant?", La réponse est:
- Parce que ce serait un cauchemar de maintenance pour les personnes responsables des scripts.
- Étant donné que les scripts sont chargés en tant que modules indépendants, l'ensemble du système est ajustable de manière dynamique - des scripts individuels peuvent être ajoutés et supprimés sans affecter les autres. Etc.
- Parce qu'ils sont chargés via / etc / profile, ce qui en fait une partie du "profil" bash de la même manière.
Si ces fichiers sont des fichiers de démarrage spécifiques à l'application qui ne sont pas essentiels au démarrage de Bash, pourquoi font-ils partie du processus de démarrage? Pourquoi ne sont-ils pas exécutés uniquement lorsque les applications spécifiques, pour lesquelles elles contiennent des paramètres, sont exécutées?
Cela me semble être une question de philosophie de conception plus large que je vais scinder en deux. La première question concerne la valeur et la pertinence de l’utilisation de l’environnement shell. At-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 paramètres simples, mais aussi largement reconnu et compris. Contrairement à dire, en décidant de configurer de telles choses de manière hétérogène, $ PATH pourrait peut-être être géré par un outil indépendant séparé, les outils préférés tels que $ EDITOR pourraient être quelque part dans un fichier sqlite, les éléments de $ LC lang pourraient être dans un fichier texte avec format personnalisé ailleurs, etc. - ne se limite pas à utiliser des variables env et/etc/profile.d
semble-t-il soudainement plus simple? Vous savez probablement déjà ce qu'est une variable env, comment elle fonctionne et comment l'utiliser, par opposition à l'apprentissage de 5 mécanismes complètement différents pour 5 aspects omniprésents de ce que l'on appelle correctement "l'environnement".
La deuxième question est "Le démarrage est-il le bon moment pour cela?", Ce qui soulève l'objection selon laquelle il n'est pas très efficace (toutes ces données pouvant ou non être utilisées, etc.). Mais:
- En réalité, il n’ya pas beaucoup de données, en partie parce que personne de bien ne les utiliserait pour plus que quelques paramètres simples (car il existe un autre moyen de configurer une application).
- S'il est utilisé à bon escient, en ce qui concerne les éléments invoqués couramment, définir, par exemple, $ CFLAGS par défaut à partir d'un fichier quelque part chaque fois que vous appelez
gcc
serait moins efficace. N'oubliez pas que la quantité de mémoire impliquée est, encore une fois, infinitésimale.
- Il peut s'agir de problèmes systémiques auxquels plusieurs applications peuvent être associées, et le shell est un terrain d'entente .
D'autres éléments pourraient être ajoutés à cette liste, mais j'espère que cela vous donne une idée du pour et du contre de la question - le principal «pro» et le principal «con» étant qu'il s'agit d'un espace de noms global.
Does it have positive ... and understood.
Qu'est-ce que vous essayez de dire ici? J'ai tout compris sauf ce paragraphe.profile.d
répertoire ne fonctionne que parce que son contenu provient de/etc/profile
, ce qui est spécifié par des shells tels que bash en tant que fichier de démarrage (voir INVOCATION inman bash
); si vous modifiez/etc/profile
, vous pouvez désactiver/etc/profile.d
./etc/profile.local
semble être une invention de SUSE, probablement de quelque part, par exemple,/etc/profile
pour pouvoir y placer ses propres affaires. Toutefois, si vous le déplacez vers un système non SUSE et ne faites aucun autre réglage, il ne sera utilisé par personne.Ces fichiers sont spécifiques à une application, mais proviennent du démarrage du shell, et non du démarrage de l'application. Un répertoire 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 fichier de configuration pouvant également être modifié par l'utilisateur seraient bogués et compliqués.
Aussi une note de côté,
/etc/profile
provient de tous les coquillages, pas seulement bash. Le fichier de configuration spécifique à bash est bashrc et provient uniquement des shells interactifs.la source
la réponse de jordanm est incorrecte.
/etc/profile
ne provient pas de tous les obus. Comme vous le soulignez, il ne provient pas parcsh
,tcsh
- Je ne suis pas sûrzsh
. Il provient desh
dérivés Bourne shell ( ), comme Korn Shell (ksh
) et BASH (bash
).csh
utilise/etc/login
. Les personnes qui ont tendance à utiliser exclusivement des dérivés de Borne Shell ont tendance à oublier que d’autres coquilles existent. Ils ajoutent quelque chose à/etc/profile
attendre de s’appliquer à «tous les utilisateurs» et sont ensuite surpris lorsque l’utilisateur impair de C Shell (et nous sommes un lot étrange) n’a pas les éléments qu’il a configurés/etc/profile
.Même dans ce cas, les gens ont tendance à oublier qu’il existe d’autres coquilles dérivées de Borne Shell. S'ils utilisent
bash
ouksh
, ils se sentent libres d'ajouter une syntaxe/etc/profile
qui n'est pas valide dans Bourne Shell, comme par exemple définir une variable et l'exporter sur la même ligne. Ensuite, vous obtenez un script qui fait#!/bin/sh
et cela étouffe la syntaxe./etc/profile
devrait s'en tenir à la syntaxe compatible Bourne Shell.De même, vous devriez vous en tenir à votre propre
.profile
usage (à utiliser.bash_profile
si vous voulez une syntaxe bash) - cela peut être un peu de frappe supplémentaire, mais c'est une frappe supplémentaire que vous faites une fois. Référence${HOME}
et non~
, etc. Certaines variantes de tâches Unon, cron s'exécutentsh
, chaque ligne de votreMakefile
est traitée parsh
. Par conséquent, si vous travaillez sur plusieurs versions d'UNIX, il est très utile de garder votre.profile
shell Bourne compatible. En tant qu'administrateur système, je ne peux pas vous dire combien de fois j'ai aidé des personnes en les.profile
rendant compatibles avec Bourne Shell.Sous Linux,
/bin/sh
est un lien vers/bin/bash
et lorsque vous l'exécutez, il recherche le chemin utilisé pour l'exécuter et (en théorie) se limite aux éléments pris en charge par Bourne Shell. De même,vi
sur Linux sevim
limite vraiment , encore une fois. Parfois, vous voyez des fonctionnalités "saigner à travers". Parfois,vim
prétendre êtrevi
fera quelque chose qui levim
supporte,vi
car les auteurs de ontvim
oublié de le désactiver en mode "compatibilité ascendante vi". Je ne serais pas surpris si vousbash
prétendez êtresh
doté de fonctionnalités similaires. Ne seriez pas surpris si certaines fonctionnalités "fonctionnent sur Borne Shell sous Linux", mais pas sous UNIX basé sur System V ou BSD (AIX, OpenBSD, etc.).la source
/bin/sh
est un lien vers/bin/bash
"? C'est une déclaration sonore.