Para definir variáveis globais, pode haver várias abordagens, dependendo dos shells dos usuários, e se o sistema suporta ou não um banco de dados de recursos login.conf ou similar, que deve ser aplicado, independentemente do shell do usuário.
A abordagem mais simples é adicionar as definições desejadas aos arquivos de sistema relevantes em /etc . Dependendo dos shells usados no sistema, você pode configurar e gerenciar vários arquivos. Por exemplo, sh e bash provavelmente esperam encontrar /etc/profile , zsh procura /etc/zprofile , enquanto csh ou tcsh procurarão algo diferente.
Se o seu sistema suportar o banco de dados de recursos, você só precisará modificar um arquivo e todas as configurações deverão ser aplicadas corretamente. No FreeBSD, por exemplo, você adicionaria sua definição de envar ao recurso setenv para qualquer classe de usuário que precisar:
default:\
:setenv=BLOCKSIZE=K,FOO=BAR:\
:tc=default:
Reconstrua o banco de dados e, no próximo login, $FOO deve ser definido.
Se você não tem login.conf , pode haver um método diferente de configurar globalmente os ambientes dos usuários em seu sistema.
Para definir variáveis para um usuário específico, acho que você precisaria usar a primeira abordagem, em que testaria o valor da variável $USER em uma instrução case ou uma construção semelhante suportada pela concha particular . Por exemplo, isso deve funcionar em sh e compatível:
case $USER in
root) FOO=ROOTBAR;;
*) FOO=USERBAR;;
esac
export FOO