Substituindo apenas variáveis específicas por envsubst

31

Estou tentando realizar a substituição de variáveis de ambiente por meio de envsubst , mas quero apenas substituir variáveis específicas.

A partir dos documentos, devo poder dizer a envsubst para substituir apenas algumas variáveis, mas não estou conseguindo fazer isso.

Por exemplo, se eu tiver um arquivo contendo:

VAR_1=${VAR_1}
VAR_2=${VAR_2}

como devo executar envsubst para que apenas substitua a referência a ${VAR_1} ?

    
por João Angelo 07.07.2016 / 11:06

2 respostas

5

Antes de chamar envsubst , você deve usar export e usar aspas simples para recuperar VAR1 modified. Como em:

export VAR1='somevalue'

Para mais detalhes, consulte:

Como substituir variáveis de shell em arquivos de texto complexos

    
por 07.07.2016 / 12:10
75

Por página do manual:

envsubst [OPTION] [SHELL-FORMAT]

If a SHELL-FORMAT is given, only those environment variables that are referenced in SHELL-FORMAT are substituted; otherwise all environment variables references occurring in standard input are substituted.

Em que as strings SHELL-FORMAT são "strings com referências a variáveis shell na forma $variable ou ${variable} [...] Os nomes das variáveis devem consistir apenas em caracteres alfanuméricos ou sublinhados ASCII, não começar com um dígito e não estarem vazios; caso contrário, essa referência variável é ignorada. "
. Então, é preciso passar os respectivos nomes de variáveis para envsubst em uma string de formato de shell (obviamente, eles precisam ser escapados / citados de modo a serem passados literalmente para envsubst ). Exemplo:

arquivo de entrada, por exemplo infile :

VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}

e alguns valores como

export  VAR1="one" VAR2="two" VAR3="three"

em seguida, executando

envsubst '${VAR1} ${VAR3}' <infile

ou

envsubst '${VAR1},${VAR3}' <infile

ou

envsubst '${VAR1}
${VAR3}' <infile

saídas

VAR1=one
VAR2=${VAR2}
VAR3=three

Ou, se você preferir a barra invertida:

envsubst \$VAR1,\$VAR2 <infile

produz

VAR1=one
VAR2=two
VAR3=${VAR3}
    
por 07.07.2016 / 12:31