Estou usando o Ubuntu como minha distribuição Linux preferida para WSL2. Eu quero criar uma variável de ambiente que persista em todos os usuários.
Eu já tentei muitas respostas e nenhuma delas funciona. Eles funcionam em uma máquina virtual, mas não em WSL. Por exemplo, eu já tentei todas as respostas desta pergunta https://askubuntu.com/questions/161924/how-do-i-set-persistent-environment-variables-for-root . Meu objetivo é executar a partir do prompt de comando wsl echo $FOO
e funcionar como wsl echo $USER
funciona. .
Além disso, o usuário padrão wsl precisa ser root.
De qualquer forma, aqui estão os passos que estou fazendo com base em todas as respostas e pesquisas.
- Habilite o usuário root e toda vez que eu executo o Ubuntu, inicie-o como usuário root
# First enable root user on Ubuntu by running this on ubuntu wsl:
sudo passwd root
# enter password etc...
# Then set that user as the default user. On command prompt run:
Ubuntu config --default-user root
- Coloque a variável de ambiente FOO
/etc/environment
como:
FOO="TRUE"
Reinicie o computador para que as alterações entrem em vigor
Abra o Ubuntu e execute
echo $FOO
. Isso não exibe nada. Se eu mudar o usuário para tono, por exemplosu tono
, e executar o mesmo comando, ele funcionará.Fiz algumas pesquisas e alterei a linha de
Defaults env_reset
paraDefaults !env_reset
on/etc/sudoers
para que as variáveis não sejam redefinidas. Fazer essa alteração e reiniciar o computador ainda não funciona.Agora modifico o arquivo /root/.bashrc e adiciono a variável de ambiente lá. Isso funciona, mas apenas se eu estiver dentro do terminal. Se no prompt de comando eu executo
wsl echo $FOO
, não funciona.
Resumindo meu objetivo é rodar o comando wsl echo $FOO
e para que ele retorne true assim como wsl echo $USER
vai funcionar. Vou ter que armazenar o valor dessa variável em um arquivo apenas por causa do quão complicado é criar uma variável de ambiente que persista para todos os usuários?
Editar
Vou apenas criar uma pasta /env com todas as variáveis de ambiente lá. Assim poderei correr
wsl echo "hello $(cat /env/FOO) world"
Mais longo, mas vai funcionar com certeza
Ok, há duas perguntas. Para variáveis de ambiente, você pode usar WSLENV.
Para usuário padrão, também sou novo no wsl e não sei como ajudá-lo. Mas minha sugestão é não confiar no root.
Aqui está o exemplo para usar o WSLENV:
Neste exemplo, não estou persistindo o ambiente. Se você quiser torná-lo persistente, use
setx.exe
ou google para uma solução baseada em GUI.referência: WSLENV: https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows/
Eu coloquei todas as minhas variáveis de ambiente
/env/my-env-variables.sh
comoagora em ~/.bashrc eu acrescento a linha no final:
source /env/my-env-variables.sh
para que funcionem quando estou usando o shell.Agora, toda vez que executo um script do Windows, só preciso lembrar de incluir essas variáveis como: