Fish Shell: Como definir várias variáveis de ambiente a partir de um arquivo usando exportação

2

É possível definir variáveis de ambiente com exportação no Fish Shell? Eu estou trabalhando em um projeto que configura variáveis dessa forma e não faz sentido manter um arquivo de configuração separado apenas para peixes.

Considere este exemplo no bash:

echo -e "foo=1\nfoobar=2\n" > foo; export $(cat foo | xargs); env | grep foo

   foo=1
   foobar=2

No shell de peixe, parece que ele só configurará uma única variável, e somente se houver uma variável no arquivo:

~ $ echo -e "foo=3\nfoobar=4" > foo; export (cat foo | xargs); env | grep foo

~ $ echo -e "foo=3" > foo; export (cat foo | xargs); env | grep foo

   foo=3

Isto é apenas uma falha / omissão na implementação de exportação de peixe?

Esta pergunta é semelhante, mas diferente das outras duas postagens:

por Chris Conover 22.09.2015 / 20:58

2 respostas

2

Seu exemplo quase funciona perfeitamente - não é export , mas o uso de xargs .

Tente:

echo -e "foo=3\nfoobar=4" > .env; export (cat .env);  env | grep foo

O motivo é que uma substituição de comando separa os argumentos em novas linhas e xargs os remove:

> count (cat .env | xargs)
1
> count (cat .env)
2
    
por 23.09.2015 / 01:42
2

Em peixes, esperamos que você receba um erro para export :

$ echo -e "foo=1\nfoobar=2\n" > foo; export (cat foo | xargs);  env | grep foo
bash: --: command not found...
fish: echo -e "foo=1\nfoobar=2\n" > foo; export (cat foo | xargs);  env | grep foo
                                         ^

Se você tiver um arquivo com variable=value linhas e quiser usá-lo para definir variáveis de ambiente:

$ cat foo
foo=1
foobar=2

$ source (sed -rn 's/^([^=]+)=(.*)/set -x  /p' foo | psub)
$ set -x | grep foo
foo 1
foobar 2
    
por 22.09.2015 / 22:35

Tags