Como defino uma variável de ambiente no momento da inicialização (por meio de um script)?

Como defino uma variável de ambiente no momento da inicialização (por meio de um script)?

Gostaria de definir algumas variáveis ​​de ambiente (no momento da inicialização) em uma máquina Ubuntu (10.04), mas quero criar seu valor por meio de um script, como:

export THE_ENV_VAR=$(script_to_execute_and_use_stdout_from)
  • A razão pela qual quero fazer isso é que os comandos usados ​​para definir as variáveis ​​de ambiente demoram muito para serem executados (cerca de 10 segundos), por isso só quero fazer isso uma vez após a inicialização. De qualquer forma, atualmente resolvi isso armazenando em cache o resultado do comando no momento da inicialização, para que as chamadas subsequentes sejam rápidas, não usando env. variáveis ​​em tudo.

Eu tentei configurar /etc/environment, mas isso apenas copia rhs literalmente

Tentei executar um script na /etc/init.d/inicialização, mas parece não funcionar.

Ideias?

Responder1

Para definir variáveis ​​ambientais de todo o sistema que estão disponíveis na inicialização, coloque-as em /etc/environment. Este arquivo não é um arquivo de script, mas consiste em expressões de atribuição, uma por linha. Assim:

SYSTEM_FOO=barnone

Observação: A expansão de variáveis ​​não funciona em /etc/environment.

Informações originais deajuda.ubuntu.com

Responder2

Coloque isso ~/.bash_profileou~/.bashrc

gedit ~/.bashrc

Use .bash_profile se precisar usar essas variáveis ​​com shells não interativos (scripts) e ~/.bashrc se estiver configurando suas variáveis ​​em um shell.

Se isso não funcionar, precisamos de mais detalhes, em particular quais variáveis ​​você está definindo e com que finalidade?

Responder3

Embora esta provavelmente não seja uma boa prática, você pode especificar variáveis ​​de ambiente como parâmetros do kernel. O núcleo do Linuxdocumentaçãotem algumas boas informações sobre isso (parágrafo importante em negrito):

A lista de argumentos

A linha de comando do kernel é analisada em uma lista de strings (argumentos de inicialização) separadas por espaços. A maioria dos argumentos de inicialização tem o formato:

 name[=value_1][,value_2]...[,value_10]

onde 'nome' é uma palavra-chave exclusiva usada para identificar a qual parte do kernel os valores associados (se houver) devem ser fornecidos. Observe que o limite de 10 é real, pois o código atual trata apenas 10 parâmetros separados por vírgula por palavra-chave. (No entanto, você pode reutilizar a mesma palavra-chave com até 10 parâmetros adicionais em situações incomumente complicadas, > supondo que a função de configuração suporte isso.)

A maior parte da classificação é codificada no arquivo fonte do kernel init/main.c. Primeiro, o kernel verifica se o argumento é algum dos argumentos especiais 'root=', 'nfsroot=', 'nfsaddrs=', 'ro', 'rw', 'debug' ou 'init'. O significado desses argumentos especiais é descrito abaixo.

Em seguida, ele percorre uma lista de funções de configuração para ver se a string de argumento especificada (como 'foo') foi associada a uma função de configuração ('foo_setup()') para um dispositivo específico ou parte do kernel. Se você passasse ao kernel a linha foo=3,4,5,6 então o kernel procuraria o array bootsetups para ver se 'foo' estava registrado. Se fosse, então ele chamaria a função setup associada a 'foo' (foo_setup()) e entregaria os argumentos 3, 4, 5 e 6 conforme fornecidos na linha de comando do kernel.

Qualquer coisa no formato 'foo=bar' que não seja aceita como uma função de configuração conforme descrito acima é então interpretada como uma variável de ambiente a ser definida.
Um exemplo (inútil?) Seria usar 'TERM=vt100' como argumento de inicialização.

Quaisquer argumentos restantes que não foram captados pelo kernel e não foram interpretados como variáveis ​​de ambiente são então passados ​​para o PID 1, que geralmente é o programa init(1). O argumento mais comum passado para o processo init é a palavra 'single' que o instrui a inicializar o computador no modo de usuário único e não iniciar todos os daemons usuais. Verifique a página de manual da versão do init(1) instalada em seu sistema para ver quais argumentos ele aceita.

EsseA resposta do AskUbuntu tem algumas boas instruções sobre como modificar os parâmetros de inicialização do kernel.

Responder4

Coloque seus comandos em /etc/rc.local. Certifique-se de ler os comentários no cabeçalho.

informação relacionada