como definir variáveis ​​de ambiente na concha de peixe

87

Alguém pode me dizer qual é a maneira correta de definir um monte de variáveis ​​de ambiente na concha do peixe?

No meu arquivo .config / fish / config.fish, eu tenho uma função para configurar minhas variáveis ​​de ambiente assim

function setTESTENV
      set -x BROKER_IP '10.14.16.216'
      set -x USERNAME 'foo'
      set -x USERPASS 'bar'
end 

quando digito no prompt de comando setTESTENVe faço um envna linha de comando, não vejo essas informações.

cfpete
fonte

Respostas:

66

As variáveis ​​que você está declarando são mantidas em um escopo local dentro de sua função.

Usar:

set -g -x

Aqui, " g" é global.

JosEduSol
fonte
148

Use Variáveis ​​Universais

Se a variável tiver que ser compartilhada entre todas as instâncias de fish do usuário atual no computador atual e preservada durante as reinicializações do shell, você deve usar -Uou --universal:

set -Ux FOO bar

Usar setcom -gou --globalnão define a variável persistentemente entre as instâncias do shell


Nota :

Não anexe a variáveis ​​universais no config.fisharquivo, porque essas variáveis ​​ficarão mais longas com cada nova instância de shell. Em vez disso, simplesmente execute set -Uxuma vez na linha de comando. E será armazenado no arquivo .config/fish/fishd.MACHINE_ID, onde MACHINE_IDnormalmente está seu endereço MAC.

Paolo Moretti
fonte
Minhas variáveis ​​não foram salvas em fishd.MACHINE_ID, mas em vez disso foram salvas em~/.config/fish/fish_variables
Seanny123
minha variável foi salva no ~/.config/fish/fish_variablesUbuntu 20.04
Igor Markelov
11

outra opção é executar:

export (cat env_file.txt |xargs -L 1)

onde env_file.txt contém linhas do formato VAR=VALUE

isso tem a vantagem de manter as variáveis ​​em um formato compatível com outros shells e ferramentas

Ophir Yoktan
fonte
Caso queira evitar comentários pode: export (grep "^[^#]" .env |xargs -L 1)
Guillermo
9

Variáveis ​​de ambiente em peixes

Eu gostaria de acrescentar que, embora a resposta de @JosEduSol não esteja incorreta e ajude a resolver o problema do OP, -gestá apenas definindo o escopo como global, enquanto -xfaz com que a variável de ambiente especificada seja exportada para processos filhos.

O motivo da falha acima é porque @cfpete está configurando os env vars dentro de uma função e o escopo padrão será local para essa função.

Jorge Bucaran
fonte