Maneira ideal de definir e ler variáveis

1

Eu preciso definir 6 variáveis que são usadas por vários serviços e aplicativos no Linux. Até agora tenho usado as variáveis de ambiente, mas acho muito complicado modificar essas variáveis em vários usuários. Ao mesmo tempo, desejo que todos os usuários possam modificar essas variáveis que são usadas globalmente.

Minha solução até agora foi usar o SQLite, mas parece ser uma bagunça quando eu quero definir as variáveis dentro de um daemon de serviço.

Então a questão é, é possível ou mesmo realista usar variáveis de ambiente globais que podem ser alteradas por qualquer usuário ou devo considerar uma solução de banco de dados como o SQLite?

Por exemplo Se eu tiver uma variável IP_RECIPIENT , essa variável deve ser acessada e definida por todos os usuários no sistema. Se for alterado, todos os usuários devem poder ler as alterações, em outras palavras, ele deve ser global mesmo quando alterado e não apenas local.

Além disso, qual é a melhor prática para usar variáveis de ambiente globais no Arch Linux ARM.

    
por JavaCake 22.03.2015 / 17:59

1 resposta

2

Uma solução simples pode ser ter essas variáveis configuradas em um arquivo, tornando esse arquivo mundial gravável e obtendo-o de /etc/bash.bashrc . Dessa forma, as variáveis estariam disponíveis para todos os usuários, qualquer alteração no arquivo originado seria mantida após a reinicialização e também estaria disponível para quaisquer novos shells iniciados. Observe que quaisquer shells abertos não terão seus valores atualizados.

  1. Crie o arquivo com as definições de variáveis e torne-o legível em todo o mundo

    printf "%s=%s\n%s=%s\n" "var1='foo'" "var2='bar'" | sudo tee /etc/variables
    sudo chmod a+w /etc/variables
    

    Isso criará um arquivo chamado /etc/variables com o seguinte conteúdo:

    var1='foo'
    var2='bar'
    
  2. Edite o /etc/bash.bashrc para torná-lo a fonte desse arquivo

    sudo printf "\n## Source global variables\n. /etc/variables\n" | 
        sudo tee -a /etc/bash.bashrc
    

Agora, quaisquer alterações nesse arquivo serão refletidas em quaisquer novos shells interativos que não sejam de login.

Se você precisar que isso seja imediatamente herdado até mesmo por shells abertos, você pode usar a variável PROMPT_COMMAND do bash:

   PROMPT_COMMAND
          If set, the value is executed as a command prior to issuing each
          primary prompt.

Edite /etc/profile e adicione esta linha:

PROMPT_COMMAND='. /etc/variables'

Depois de fazer isso, todas as alterações no arquivo /etc/variables estarão imediatamente disponíveis para todos os shells, pois o arquivo será originado antes que todos os avisos sejam exibidos. Observe que isso só terá efeito depois que os usuários fizerem login novamente, já que precisarão ler /etc/profile novamente.

    
por 22.03.2015 / 18:41