Preciso salvar variáveis de ambiente em um arquivo e (mais tarde) um processo deve importá-las. Preciso disso para solucionar um programa fooprog
que anula o ambiente antes de executar um barscript
e 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 fooprogram
e fazer com que barscript
elas 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/$$/environ
e analisar isso de barscript
alguma 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 -p
gera 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 -p
linha 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 -v
para 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 declare
em bash
.