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 .