export (salvar) e importar variáveis de shell (origem)

2

Eu preciso salvar variáveis de ambiente em um arquivo e (mais tarde) um processo deve importá-las. Eu preciso disso para contornar um programa fooprog que anula o ambiente antes de executar um barscript , e eu preciso de algumas variáveis de ambiente em barscript . Por isso, estou planejando salvar todas as variáveis de ambiente em um arquivo antes de executar fooprogram e fazer com que barscript as forneça de um arquivo.

Eu tentei isso, mas não funciona se houver variáveis que contenham espaços.

$ env > my_environment
$ . my_environment

Eu acho que a maneira correta é mexer com /proc/$$/environ e analisar isso de barscript de alguma forma, mas não consigo encontrar a maneira correta de fazer isso.

edit: as citações ou novas linhas são problemáticas também. Como poderia ser feito para que envars como problemático como o seguinte poderia ser originado sem problemas?

PROBLEMATIC='this has double quotes " and single quotes '\'' and even
newlines.

See?'
    
por Carlos Campderrós 20.05.2016 / 10:54

1 resposta

5
$ declare -p > my_environment

Mais tarde, dentro de barscript :

. my_environment

declare -p gera as variáveis de ambiente em um formato que pode ser executado pelo shell, incluindo aspas e escape de variáveis, conforme necessário.

$ foobar='"some double-quoted text"'
$ echo $foobar 
"some double-quoted text"
$ declare -p foobar
declare -- foobar="\"some double-quoted text\""

BTW, se você não quiser produzir todo o seu ambiente, você não precisa. Basta nomear os vars que você deseja gerar na linha de comando declare -p :

$ declare -p HOME PATH foobar
declare -x HOME="/home/cas"
declare -x PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
declare -- foobar="\"double-quoted-text\""

ou canalizar através de grep -v para excluir variantes específicas que você não deseja na saída.

Para obter apenas as variáveis exportadas:

declare -p -x > my_environment

Para mais informações, consulte help declare in bash .

    
por 20.05.2016 / 11:33