Definindo a variável de ambiente do usuário permanentemente, fora do shell?

4

É possível configurar uma variável ambiental que possa ser acessível a partir de qualquer shell, não específica, e que não decaia assim que sua sessão terminar?

Eu gostaria de configurar uma variável NODE_ENV em todo o sistema, como eu poderia conseguir isso?

    
por bevacqua 20.09.2013 / 18:13

1 resposta

4

Se todos os shells nos quais você tem interesse forem compatíveis com o Bourne, você pode usar /etc/profile para essa finalidade.

O cabeçalho de /etc/profile :

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...)

Para garantir que você tenha csh e tcsh coberto, também é possível adicionar suas variáveis a /etc/csh.login .

O cabeçalho de /etc/csh.login :

# /etc/csh.login: system-wide .login file for csh(1) and tcsh(1)

Para zsh , você deseja /etc/zshenv .

Para facilitar a manutenção

Eu escreveria todas as variáveis que você quer em um único arquivo e escreveria um script Perl (ou outro) simples que leria essas variáveis e atualizaria os arquivos relevantes para todos os shells.

Algo como o seguinte em Perl deve funcionar:

 #!/usr/bin/perl

use strict;
use warnings;

my $bourne_file = '/etc/profile';
my $csh_file = '/etc/csh.login';
my $zsh_file = '/etc/zshenv';
open my $BOURNE,'>>', $bourne_file;
open my $CSH,'>>', $csh_file;
open my $ZSH,'>>', $zsh_file;
while(<DATA>){
    chomp;
    my $delimiter = ','; #Change , to whatever delimiter you use in the file

    my ($var, @value) = split /$delimiter/;        
    my $value = join $delimiter,@value;
    print $BOURNE qq{export $var="$value"\n};
    print $CSH    qq{setenv $var "$value"\n};
    print $ZSH    qq{export $var="$value"\n};
}
close $BOURNE;
close $CSH;
close $ZSH;
__DATA__
var1,val1
var2,val2

Você pode usar um delimitador diferente de , para delimitar variáveis e valores, desde que esse delimitador não seja permitido em nomes de variáveis.

Isso pode ser ainda mais ordenado inserindo delimitadores exclusivos em torno da parte que você deseja que seu script grave em cada arquivo, para que, sempre que usar o script para atualizar os arquivos, ele não duplique as entradas anteriores, mas as substitua. > in situ .

    
por 20.09.2013 / 18:18