Como posso definir uma variável de ambiente do usuário? (permanentemente, não sessão)

Isto está a irritar-me. Vi várias sugestões (todas usando arquivos e sintaxe diferentes) e nenhuma delas funcionou.

Como posso definir uma variável de ambiente para um usuário específico? Eu estou no debian squeeze. Qual é a sintaxe exata que devo colocar no arquivo para fazer ABC = "123"?

Solução

Você tem que colocar a declaração nos arquivos de inicialização da sua concha:

  • Se você estiver usando bash, ash, ksh ou alguma outra concha ao estilo de Bourne, você pode adicionar

     ABC="123"; exportar ABC

no seu arquivo .profile (${HOME}/.profile). Esta é a situação padrão na maioria das instalações Unix, e em particular no Debian.

Se sua shell de login é bash, você pode utilizar .bash_profile (${HOME}/.bash_profile) ou .bash_login em seu lugar.

Note: Se algum desses arquivos existe e sua shell de login é bash, .profile não é lido quando você faz login over ssh ou em um console de texto, mas ainda pode ser lido ao invés de .bash_profile se você fizer login a partir da GUI. Além disso, se não houver .bash_profile, então utilize .bashrc.

  • Se você'tiver definido zsh como sua shell de login, utilize ~/.zprofile em vez de ~/.profile.

  • Se você estiver usando o tcsh, adicione

     setenv ABC "123"

no arquivo .login (${HOME}/.login)

  • se você estiver usando outra shell veja no manual da shell como definir variáveis de ambiente e quais arquivos são executados na inicialização da shell.
Comentários (12)

Este é um procedimento geral que você pode usar para praticamente qualquer concha. Em qualquer caso, você tem que saber com qual shell o usuário normalmente faria o login:

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

Então você tem que descobrir quais os arquivos de pontos que esta concha normalmente leria:

man $shell

Um atalho que pode funcionar é listar aqueles arquivos de pontos que contêm o nome da concha:

ls ~/.*${shell}*

Se você quiser verificar se um dos arquivos é realmente lido durante o login, você pode simplesmente imprimir o nome do arquivo em cada um deles, por exemplo:

echo .bashrc

Ao fazer login, você deve então ver quais arquivos estão sendo lidos, e você pode decidir qual deles modificar. Cuidado para não tentar utilizar echo "$0" ou similar, porque o valor de $0 depende de como a shell processa os arquivos de pontos, e pode ser enganoso.

Quando se trata de declarar a variável " permanentemente" note que isto só se estende à sessão. Não há como acessar o valor de uma variável sem uma sessão, portanto não tem significado fora de uma. Se você quer dizer "read-only", isso é dependente da shell, e em **Bash*** você pode usar:

declare -r VAR

se já tem um valor, ou

declare -r VAR=value

para a atribuir ao mesmo tempo. Nem todos os shells têm este recurso.

Para declarar uma variável na maioria das shells, você deve utilizar um nome de variável ([A-Za-z_][A-Za-z0-9_]*), seguido por um sinal de igual (e não há espaços em torno do sinal de igual), depois um valor (de preferência citado a menos que o valor seja um simples [A-Za-z0-9_]+). Por exemplo:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1
Comentários (0)

Usar exportação.

export ABC="123"

Para verificar se está...##39;s definido, use

env

e/ou

env | grep ABC

Para adicioná-lo permanentemente, adicione isto ao seu arquivo ~/.bashrc.

export ABC="123"
Comentários (6)