O que fazem os scripts em /etc/profile.d?

71

Estou lendo sobre o script de shell básico da Linha de Comando do Linux e da Bíblia de Script do Shell .

Ele diz que o arquivo /etc/profile define as variáveis de ambiente na inicialização do shell Bash. O diretório /etc/profile.d contém outros scripts que contêm arquivos de inicialização específicos do aplicativo, que também são executados no momento da inicialização pelo shell.

  • Por que esses arquivos não fazem parte de /etc/profile se também forem essenciais para a inicialização do Bash?

  • Se esses arquivos são arquivos de inicialização específicos do aplicativo que não são críticos para a inicialização do Bash, por que eles fazem parte do processo de inicialização? Por que eles não são executados somente quando os aplicativos específicos, para os quais eles contêm configurações, são executados?

por asheeshr 09.02.2013 / 06:21

2 respostas

58

Why are these files not a part of /etc/profile if they are also critical to Bash startup ?

Se você quer dizer: "Por que eles não são apenas combinados em um script gigante?", a resposta é:

  1. Porque isso seria um pesadelo de manutenção para as pessoas responsáveis pelos scripts.
  2. Porque ter os scripts carregados como módulos independentes torna todo o sistema mais ajustável dinamicamente - os scripts individuais podem ser adicionados e removidos sem afetar os outros. Etc.
  3. Porque eles são carregados via / etc / profile, o que faz deles parte do bash "profile" da mesma maneira, de qualquer maneira.

If these files are application-specific startup files not critical to Bash startup, then why are they part of the startup process ? Why are they not run only when the specific applications, for which they contain settings, are executed ?

Parece-me uma questão de filosofia de design mais ampla que dividirei em dois. A primeira questão é sobre o valor e a adequação do uso do ambiente shell. Tem valor positivo? Sim, é útil. É a melhor solução para todos os problemas de configuração? Não, mas é muito eficiente para gerenciar parâmetros simples e também amplamente reconhecido e compreendido. Contraste que dizer, decidindo configurar tais coisas de forma heterogênea, talvez $ PATH pudesse ser gerenciado por uma ferramenta independente separada, ferramentas preferenciais como $ EDITOR poderiam estar em um arquivo sqlite em algum lugar, $ lang coisas poderiam estar em um arquivo de texto com um formato personalizado em algum outro lugar, etc - não apenas usando variáveis env e /etc/profile.d de repente parece mais simples? Você provavelmente já sabe o que é uma variável env, como eles funcionam e como usá-los, versus aprender 5 mecanismos completamente diferentes para 5 diferentes aspectos onipresentes do que é apropriadamente chamado "o ambiente".

A segunda pergunta é: "A inicialização é o momento apropriado para isso?", o que levanta a objeção de que não é muito eficiente (todos os dados que podem ou não ser usados, etc). Mas:

  • Realisticamente, não são tantos dados, em parte porque ninguém em sã consciência os usaria para mais do que alguns parâmetros simples (já que existem outros meios de configurar um aplicativo).
  • Se for usado com sabedoria, com relação a coisas que são comumente invocadas, a configuração, por exemplo, padrão $ CFLAGS de um arquivo em algum lugar sempre que você chamar gcc seria menos eficiente. Tenha em mente que a quantidade de memória envolvida é, novamente, infinitesimal.
  • Pode envolver coisas sistêmicas com as quais mais de um aplicativo pode estar envolvido, e o shell é um terreno comum .

Mais poderia ser adicionado a essa lista, mas esperamos que isso lhe dê uma idéia sobre os prós e contras do problema - o principal 'pro' e o principal 'con' é que ele é um namespace global.

    
por 09.02.2013 / 07:02
10

Esses arquivos são específicos de um aplicativo, mas são originados na inicialização do shell, não quando o aplicativo é iniciado. Um diretório de configuração é usado aqui pelo mesmo motivo que é encontrado em muitos outros lugares. Isso permite que um aplicativo ou pacote de software modifique configurações. Isso não seria possível sem uma configuração dividida, já que vários pacotes que tentam gerenciar / atualizar um único arquivo de configuração que também pode ser modificado pelo usuário ficariam com problemas e bagunçados.

Também uma nota lateral, /etc/profile é originada por todos os shells, não apenas por bash. O arquivo de configuração específico do bash é bashrc e é fornecido apenas para shells interativos.

    
por 09.02.2013 / 06:50