script de variáveis de ambiente

0

Existem várias caixas de centos linux no meu local de trabalho.

Eu fui encarregado de criar alguma forma de ferramenta de variável de ambiente para eles.

A ideia é que o usuário execute a ferramenta, com o argumento de seu projeto (e talvez seu modo 'pythonpath'), pressione enter e a) uma nova variável chamada "PROJ" é feita eb) seu PYTHONPATH tem uma nova pasta anexada. O escopo dessas variáveis dura apenas enquanto elas estiverem abertas.

Eu já vi isso em outros lugares onde trabalhei. Mas eu nunca cavei fundo o suficiente para entender que está funcionando, e eu estou me chutando agora!

Eu estou supondo que é um script bash que exporta o nome da variável para o caminho dado. O Python exporta variáveis de ambiente, mas não permanece - é como se a exportação fosse aplicada apenas a processos filhos do script python, portanto, quando o script termina, as variáveis terminam também. É por isso que cheguei à conclusão de que é um script bash.

Em caso afirmativo, qual é a melhor maneira de distribuir essa ferramenta, para que todas as caixas tenham o script, preferencialmente com alias, para que o usuário não esteja digitando source <script_location>.sh ?

Em segundo lugar, qual é a melhor maneira de verificar se os argumentos são válidos? Eu estava pensando em um arquivo json com os códigos de projeto corretos neles.

Por fim, posso ter uma mistura de argumentos sinalizados e sem sinalização? Por exemplo, o usuário digitaria algo como <tool_name> <project_title> -f onde -f seria um recurso opcional adicional? Devo distribuí-lo para cada usuário ~ / .bashrc?

Se houver algum exemplo do que estou procurando, ficaria incrivelmente grato em ser apontado na direção certa ...

    
por Adrian 27.09.2018 / 12:13

2 respostas

1

Você pode criar um arquivo sh que defina uma função que atualizou o ambiente. A função pode ser nomeada "tool_name".

Verifique se há link - as células de login interativas acessam /etc/profile . Verifique esse arquivo no seu sistema e você verá que ele fará algo como a origem de todos os arquivos em uma determinada diretiva. No meu sistema baseado em Ubuntu, é

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Então, o arquivo /etc/profile.d/tool_name.sh parece

# create the tool function to update the environment
tool_name() {
    # todo: parse options, validate arguments
    export PROJ=$1
    PYTHONPATH+=":$PROJ/bin"
}

E os usuários não precisam de nada especial para disponibilizá-los para eles.

Não estou dizendo como distribuir isso para muitas caixas. Você precisará de privilégios sudo ou acesso root para instalar em /etc/profile.d

    
por 27.09.2018 / 16:50
0

O ambiente só é passado para processos filhos; um processo filho nunca pode influenciar diretamente o ambiente do processo pai.

Para definir variáveis no shell do usuário, elas precisam ser definidas pelo próprio shell. Uma maneira é "fornecer" um script que define essas variáveis, ou seja, o script é executado pelo shell em execução:

$ source scriptname

Se você simplesmente chamar o script:

$ scriptname

então um novo shell (ou seja, um novo processo) é iniciado e lê o script, definindo as variáveis em seu ambiente. No entanto, assim que esse shell é feito com o script, ele sai, destruindo o ambiente recém-criado; daí uma perda de tempo.

Como alternativa, você pode definir uma função de shell via /etc/profile , que definirá o ambiente corretamente. Somente quando o usuário chamar a função, isso será feito. Dessa forma, parece que você está chamando algum comando, que na verdade é uma função de shell e, portanto, executado dentro do mesmo shell, em vez de um novo shell sendo iniciado.

Dentro do script ou da função, você pode realizar as verificações necessárias para configurar o ambiente corretamente.

    
por 27.09.2018 / 14:34