Exporte uma seleção de variáveis de ambiente com o escape correto

5

Eu quero exportar algumas variáveis de ambiente que eu configurei em um script de traço para um arquivo:

myvariable="line 1

LINE=3
some characters: # \" \$
line 5"
myvariable2="abc"
export myvariable myvariable2

resultado esperado (um script utilizável):

declare -x myvariable="line 1

LINE=3
some characters: # \" \$
line 5"
declare -x myvariable2="abc"

O resultado é o que recebo usando o comando export . Mas exporta todos os envios e não permite a filtragem. Por causa do caractere de várias linhas da variável, grep ing o resultado não é possível.

Por outro lado, o comando printenv permite a saída apenas de uma seleção de variáveis, mas não se preocupa com o escape e não produz os nomes das variáveis neste caso de uso.

    
por Daniel Alder 05.10.2015 / 17:46

1 resposta

2

Em zsh ou yash .

export -p myvariable myvariable2

funcionaria como seria de esperar.

Caso contrário, em bash , você ainda pode fazer:

for var in myvariable myvariable2; do
  printf 'export %s=%q\n' "$var" "${!var}"
done

POSIXly, você pode fazer as citações manualmente usando awk :

awk -v q="'" '
  function escape(v) {
    gsub(q, q "\" q q, v)
    return q v q
  }
  BEGIN {
    for (i = 1; i < ARGC; i++)
      print "export " ARGV[i] "=" escape(ENVIRON[ARGV[i]])
  }' myvariable myvariable2

Por diversão, uma solução hacky que funciona em alguns shells ( bash , zsh , mksh , ksh93 , não yash nem dash ):

 (PS4=; set -x; export "myvariable=$myvariable") 2>&1
    
por 05.10.2015 / 17:59