exportar (salvar) e importar (fonte) variáveis ​​​​de shell

exportar (salvar) e importar (fonte) variáveis ​​​​de shell

Preciso salvar variáveis ​​de ambiente em um arquivo e (mais tarde) um processo deve importá-las. Preciso disso para solucionar um programa fooprogque anula o ambiente antes de executar um barscripte preciso de algumas variáveis ​​de ambiente no barscript. Então, estou planejando salvar todas as variáveis ​​de ambiente em um arquivo antes de executar fooprograme fazer com que barscriptelas sejam originadas de um arquivo.

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

$ env > my_environment
$ . my_environment

Acho que a maneira correta é mexer /proc/$$/environe analisar isso de barscriptalguma forma, mas não consigo encontrar a maneira correta de fazer isso.

editar: citações ou novas linhas também são problemáticas. Como isso poderia ser feito para que envars tão problemáticos quanto os seguintes pudessem ser obtidos sem problemas?

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

See?'

Responder1

$ declare -p > my_environment

Mais tarde, dentro barscript:

. my_environment

declare -pgera variáveis ​​de ambiente em um formato que pode ser executado pelo shell, incluindo cotação 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\""

Aliás, se você não deseja gerar todo o seu ambiente, não é necessário. Basta nomear os vars que você deseja gerar na declare -plinha de comando:

$ 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 canalize grep -vpara excluir vars específicos 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 declareem bash.

informação relacionada